2013-11-23 1 views
1

Глядя на документации по текстовым запросам в документации НЕСТА: http://nest.azurewebsites.net/query/text.htmlразница NEST клиент ElasticSearch между текстом и TextPhrase

Я неясно, что практическая разница между текстом и методами TextPhrase. Мое лучшее предположение заключается в том, что оба учитывают порядок слов в запросе, но TextPhrase позволяет вам настроить важность этого порядка с помощью SLOP. Это правильно и главное отличие?

ответ

6

Text ряд запросов были переименованы в Match в Elasticsearch в некоторый момент (ранние версии 0.19 или 0.20, я считаю). Вы можете найти документацию для Match здесь: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-query.html

Способ, которым они работают, прост. Учитывая эту фразу: «быстрая коричневая лиса перепрыгнула», то match запрос ищет:

  • quick ИЛИ brown ИЛИ fox ИЛИ jumped

Там нет заказа участвует ... match просто ищет наличие отдельных жетонов. Порядок маркеров может быть полностью случайным, распределенным по всему абзацу, и документ вернется в результате.

В отличие от этого, match_phrase ищет:

  • "quick brown fox jumped"

Потому что он ищет фраз, порядок вопросов токенов. С полом нуля по умолчанию у вас есть поведение с точной фразой.

Если вы увеличиваете отскок, вы можете сделать фразу немного менее точной. Например, slop of one позволяет одно редактирование фразы (редактирование считается вставкой, удалением или перемещением слова). Так помойное одного может также соответствовать любой из этих фраз:

  • "quick brown fox really jumped"
  • "the quick brown fox jumped"
  • "quick brown fox jumped high"

Важно знать, что помои не поддерживают порядок либо. Отстойные два допускает два изменения, так что эта фраза будет также соответствовать:

  • "brown quick fox jumped"

Первого редактирование двигалось «коричневым» в первую позицию, в то время как вторые редактировать двигались «быстрым» во вторую позицию. Поскольку slop заботится только о номерах редактирования, а не о позиционировании, большие отскоки имеют тенденцию давать вам довольно запутывающие результаты. Слой выше 2-3, вероятно, плохая идея.

+2

Хорошо отметить, что NEST также имеет '.Match() /. MatchPhrase() /. MatchPhrasePrefix() /. Конструкции запросов MultiMatch()'. «Text *()» хранятся для обратной совместимости. –

+0

Ах, да, очень хорошая точка. Спасибо за разъяснения! :) – Zach

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