Статьи

Pes: подключаемый модуль DSL с впечатляющим упругим запросом для упругого поиска

Эластичный запрос DSL-компоновщик дляasticsearch

Подключаемый модуль DSL с впечатляющим упругим запросом эластичных запросов ( GareHub Repo  ). Он нацелен на то, чтобы быть частью новых инструментов мониторинга / контроля или уже существующих. Таким образом, в отсутствие конструирования встроенных запросов в es сложность написания DSL-запроса может быть сведена к минимуму в свете этого расширения. Pes в основном помогает в создании экономящих время запросов относительно имеющейся группы псевдонимов, так что даже если вам нужно делать сложные и сложные запросы, Pes предоставляет вам полностью контролируемый язык запросов для повышения эффективности ваших запросов.

Как уже упоминалось, Pes поддерживает несколько сокращений. Когда эти удобные выражения находятся в действии с несколькими пунктуациями, Pes создает соответствующие блоки структурированных запросов вместе с парами, которые предоставляет эластичный поиск. Кроме того, Pes содержит две функции для обработки вывода как  string или  array.

Как это работает

Это расширение может быть интегрировано в любой веб-редактор, который позволяет нам создавать запросы. Для этого вы можете получить его либо cloning с помощью, либо  с помощью  bower. В любом случае есть двоякое: во-первых, вы получаете исходный код, во-вторых, вы можете легко протестировать все доступные выражения после установки тестовой зависимости, называемой  платформой QUnit,  через bower install.

bower install pes

После связывания библиотеки ( pes.js или  pes.pack.js) на веб-странице вы можете использовать две существующие функции, а именно,  queriesToArray и  queriesToString управлять выходными данными:

<script src="/path/to/pes.pack.js"></script>
or
<script src="/path/to/pes.js"></script>
..
<script>

var outputStr = pes.queriesToString('q[m]');

var outputArray = pes.queriesToArray('q[mpp]'));

console.log(outputStr);

console.log(outputArray);
</script>

Два консольных журнала возвращаются следующим образом:

"query": {
  "match": {
    "FIELD": "TEXT"
  }
}

["\"query\": {",
 "  \"match_phrase_prefix\": {",
 "    \"FIELD\": \"TEXT\"",
 "  }",
 "}"]

Примеры

Для получения более подробной информации, пожалуйста, посмотрите на  тестовые  случаи, расположенные в папке тестов. Это действительно полезно, чтобы переварить все существующие выражения, которые предоставляет Pes.

Вложенные блоки запроса вместе с парами ключ: значение могут быть легко созданы в одну строку. Что важно отметить , что вы можете переопределить значения по умолчанию элементов , таких как  sizeexplain_sourcezero_terms_query, operator и тому подобное, бу , используя  key{new_value} синтаксис. new_value может быть строка, число, массив, правда, ложь, или нуль. Вы увидите это поведение в 3-м и 4-м примерах.

Рядом с этим, если вы хотите использовать более одного типа в с  match ( m псевдоним) и  match_phrase_prefix( mpp псевдоним) запросов , а не использовать их поведение по умолчанию,  :p вступает в игру , чтобы обеспечить вложенные типы , как m:p[qy]mpp:p[qy,op,me]. Они будут сгенерированы следующим образом:

"match": {
  "FIELD": {
    "query": "TEXT"
  }
}
"match_phrase_prefix": {
  "FIELD": {
    "query": "TEXT",
    "operator": "and",
    "max_expansions": 10
  }
}

// rather the default characteristics of the two queries ([m | mpp]):

"match": {
  "FIELD": "TEXT"
}

"match_phrase_prefix": {
  "FIELD": "TEXT"
}

Обратите внимание, что [o] и может использоваться для создания пустого объекта и массива соответственно. 2-й и 3-й примеры иллюстрируют, как использовать [o] при написании запроса pes.

1. Пример

{
    q[mpp:p[query]]
}
{
    "query": {
      "match_phrase_prefix": {
        "FIELD": {
          "query": "TEXT"
        }
      }
    }
}

2. Пример

{
   q[b[shouldN[o[m],o[m]]]]
}
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        },
        {
          "match": {
            "FIELD": "TEXT"
          }
        }
      ]
    }
  }
}

3. Пример

{
    q[bool[mustN[o[range[gte{1}]]],shouldN[o[range[gt{1955}]]]]]
}
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "FIELD": {
              "gte": 1
            }
          }
        }
      ],
      "should": [
        {
          "range": {
            "FIELD": {
              "gt": 1955
            }
          }
        }
      ]
    }
  }
}

4. Пример

{
    q[m:p[qy{"hi elastic query"},op{"or"},ztq]],sz,bst,src{["_id","surname"]},exp{true}
}
{
  "query": {
    "match": {
      "FIELD": {
        "query": "hi elastic query",
        "operator": "or",
        "zero_terms_query": "none"
      }
    }
  },
  "size": 10,
  "boost": 1,
  "_source": [
    "_id",
    "surname"
  ],
  "explain": true
}

Содействие

Это расширение только что опубликовано, поэтому все идеи всегда приветствуются и ценны. Не стесняйтесь, чтобы открыть  вопрос  на GitHub и сделать пиар.