Как написать регулярное выражение в стиле эластичного поиска "URI Search" - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу запросить Elasticsearch, используя формат "URI Search" (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html#search-uri-request) с регулярным выражением, но не могу выяснить, как обращаться с символами специальных символов регулярного выражения, такими как \ s и простым пробелом.

Допустим, в моем индексе хранится термин [apple computer] (используется анализатор ключевых слов). Этот термин будет найден с:

  • curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*comp.*/&pretty
  • curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*appl.*/&pretty
  • curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*pple.*/&pretty

но какой синтаксис я должен использовать (в curl или с помощью другого инструмента) для запроса с использованием этих регулярных выражений:

 /.*pple\s+compu.*/
 /.*le +compu.*/

1 Ответ

0 голосов
/ 07 февраля 2019

Я думаю, что нашел ответ на свой вопрос:
Сначала, когда мой индекс настроен так, мне нужно использовать name.keyword для полнотекстового поиска

{
  "myindex" : {
    "aliases" : { },
    "mappings" : {
      "mytype" : {
        "properties" : {
          "name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
...

Затем,делая запрос, используя формат "URI Search", я должен использовать типичное преобразование, пробел должен быть записан как + + должен быть записан как% 2b, любые другие специальные символы в URL должны быть написаны с его эквивалентом% ASCII, так что получается, что мойрегулярное выражение /.*le +compu.*/ должно быть запрошено так:
curl -XGET "http://es:9200/myindex/mytype/_search?q=name.keyword:/.*pple+%2bcomp.*/&pretty"
Наконец, я не вижу в regexp doc или lucene упоминания символа \s в качестве подстановочного знакадля пространства, но не имеет большого значения, так как его можно переписать с помощью под-шаблонов регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...