2015-01-14 3 views
2

Предположим, что мой индекс есть два документа:ElasticSearch принимая порядок слов во внимание в запросе соответствия

  1. «Foo бар»
  2. «бар Foo»

Когда я регулярный запрос матча для «bar foo» оба документа соответствуют правильно, но они получают равные оценки соответствия. Тем не менее, я хочу, чтобы порядок слов был значительным во время подсчета очков. Другими словами, я хочу, чтобы «bar foo» имел более высокий балл.

Итак, я попытался поместить свой запрос соответствия в предложение must запроса bool и включил match_phrase (с той же строкой запроса) в качестве предложения. Это, кажется, правильно оценивает результаты, пока я не выполнил поиск с помощью «bar test foo». В этом случае запрос match_phrase, похоже, не соответствует, а образы снова возвращаются с равными оценками.

Как я могу построить свой индекс/запрос, чтобы он учитывал порядок слов, но не требует, чтобы все слова поиска существовали в документе?

+0

Я думаю, что расширение CirrusSearch MediaWiki делает это. Результаты могут быть неожиданными: https://www.mediawiki.org/wiki/Thread:Help_talk:CirrusSearch/Impact_of_word_order_in_two-words_search_query – Nemo

ответ

1

Посмотрите на SpanNearQuery, он позволяет указывать заказ с или без slop (ограничение того, насколько сроки должны быть друг от друга).

Elasticsearch - here.

0

Посмотрите на PhraseSearch. Вы должны объединить свой текущий поиск с PhraseSearch (повысить уровень PhraseSearch немного выше, чем регулярное совпадение).

Doc: PhraseSearch

Смежные вопросы