Поиск по словосочетанию с разным порядком слов


(Sergey Podlesny) #1

Можно ли средствами ElasticSearch 1.7 составить запрос, в котором будет поиск по словосочетанию по нескольким полям, чтобы пользователь ввел словосочетание ""красный цвет"", а нашлось и ""красный цвет"" и ""цвет красный"". Интересует именно реализация на стороне эластика через какой-нибудь параметр или флаг.
Текущий запрос находит только ""красный цвет"":

{
  "size": 10,
  "query": {
    "query_string": {
      "default_operator": "AND",
      "fields": [
        "name",
        "description"
      ],
      "query": "\"красный цвет\""
    }
  }
}

(Igor Motov) #2

Я бы не стал использовать ElasticSearch 1.7. Эта версия морально устарела, больше не поддерживается, и просто небезопасна.

Посмотрите на параметр phrase_slop если его увеличить до 2, то он должен и красный цвет и цвет красный. Но побочный эффект этого параметра, то что он будет находит еще и фразы типа красный или оранжевый цвет.

Если нужно больше контроля, то посмотрите запрос span near. В нем можно указывать нужно ли учитывать порядок слов во фразе.


(Sergey Podlesny) #3

Спасибо за совет по переходу на новую версию!
Да, версия устарела. Пробовали переход на 5 версию - получили ошибки при сортировке nested-агрегаций.
Уже думал что про баг забыли. Но после Вашего сообщения был найден PR, который фиксит ошибку, ура!
По сабжу, решения в 1.7 и правда не совершенны. В 6+ версии уже наверное есть что-то получше для решения моего вопроса?


(Igor Motov) #4

На сколько я знаю - нет.


(Igor Motov) #5

Но, возможно, новое решение появится в 7.0.0 - https://github.com/elastic/elasticsearch/issues/29636


(system) #6

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.