Elasticsearch match VS query_string - PullRequest
       0

Elasticsearch match VS query_string

0 голосов
/ 31 мая 2018

Вот мои тесты:

Использование соответствия

{"query":{"bool":{"must":[{"match":{"name":{"query":"ka"}}},{"term":{"kind":"k1"}}]}}}

0 совпадений

Затем использование query_string

{"query":{"bool":{"must":[{"query_string":{"fields":["name"],"query":"*ka*"}},{"term":{"kind":"k1"}}]}}}

около 1000+ совпадений
Некоторые имена, такие как «katyperry», «KathleenLights» и т. Д. Их нельзя найти с помощью match

Кроме того, еще один пример, который вызывает у меня даже больше сомнений, - это когда я использую match для поиска электронной почты

{"query": {"bool": {"must": [{ "match":{"email":"testname@gmail.com"}}]}}}

ES возвращает все электронные письма, которые содержат «gmail.com»

Так как же работает «соответствие» в этих случаях?

1 Ответ

0 голосов
/ 31 мая 2018

Ваш первый запрос не возвращает результатов, потому что вы не используете поиск по шаблону, который вы не смогли бы сделать, даже если бы захотели, потому что "match" не поддерживает символы подстановки.:) Используйте это вместо:

{"query":{"bool":{"must":[{"wildcard":{"name":"*ka*"}},{"term":{"kind":"k1"}}]}}}

Ваш последний запрос возвращает эти результаты, потому что вы сохраняете электронную почту как проанализированную строку, а стандартный анализатор разбивает строки на пробелы и знаки пунктуации.Это замечательно, когда вы индексируете "привет, мир" и можете найти совпадения для "привет" и "мир".Но это также означает, что «testname@gmail.com» рассматривается как три слова - «testname», «gmail» и «com».

Для исправления этой проблемы необходимо, чтобы в вашем отображении была определена «электронная почта» как неанализированная строка.Если вы не используете v5.0 или выше, в этом случае - хорошие новости!У вас уже есть поле «ключевое слово», которое не анализируется, и следующий запрос по волшебству просто будет работать для вас:

{"query": {"bool": {"must": [{ "match":{"email.keyword":"testname@gmail.com"}}]}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...