ElasticSearch сортировка по регулярному выражению - PullRequest
0 голосов
/ 24 августа 2018

У меня есть поле в индексе ElasticSearch 6, которое можно сопоставить с регулярным выражением.Мне нужно отсортировать результаты поиска так, чтобы документы со значениями, которые совпадали, шли раньше, чем те, которые этого не делают.Есть ли какой-нибудь способ использовать регулярное выражение в предложении сортировки?

Пример документа:

 "mappings" : {
  "unit" : {
    "properties" : {
      "description" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }

Я думал о такой сортировке скриптов:

  "sort" : {
    "_script" : {
        "type" : "number",
        "script" : {
            "source": "regex('some_regexp_here').match(doc['description'].value) ? 1 : 0 ",
        },
        "order" : "desc"
      }
   }

Возможно ли это?Есть ли другие обходные пути?Спасибо.

1 Ответ

0 голосов
/ 27 августа 2018

Я понял это. Предложение сортировки должно быть таким:

"sort": {
  "_script": {
    "order": "desc",
    "type": "number",
    "script": {
      "source": 
         "def m = /my_regex_here/.matcher(doc['description'].value);
          if(m.matches()) {
            return 1
          } else {
            return 0
          }"
    }
  }
}

Обратите внимание, что символы '/' вокруг регулярного выражения обязательны.

...