Поиск Elasticsearch с помощью строк запросов: Фразовый запрос

В этой статье мы поговорим об использовании фразы query при поиске с помощью строк запроса.

По умолчанию все термины являются необязательными, если хотя бы один из них совпадает. Это связано с тем, что по умолчанию используется логический оператор OR. Мы можем увидеть это, если будем искать спагетти с макаронами.

Если мы посмотрим на результаты, то увидим, что они включают продукты, в названии которых есть только макароны.

Но что, если мы хотим выполнить поиск по конкретной фразе? Это можно сделать, заключив фразу в кавычки. Давайте добавим кавычки в запрос, который мы только что выполнили.

Теперь мы получим только один результат - документ, содержащий в своем названии и пасту, и спагетти, причем в таком порядке. Чтобы продемонстрировать, что порядок имеет значение, давайте попробуем поменять местами термины во фразе.

Обратите внимание, что продукт больше не соответствует запросу, потому что порядок терминов не совпадает. Давайте снова изменим порядок и вернемся к предыдущему результату поиска.

Обратите внимание, что в названии продукта также присутствует дефис ("макароны - спагетти"), так почему же эта фраза совпадает? Ответ связан с тем, как Elasticsearch анализирует документы, когда они добавляются в индекс или их значения изменяются. По умолчанию используется стандартный анализатор, поэтому давайте просто проверим, как анализируется название этого продукта. Для этого существует удобный API _analyze, который возвращает условия после того, как предоставленное значение было токенизировано. Мы установим анализатор на стандартный и передадим название продукта в качестве текста для анализа.

Результатом будет список лексем, причем дефис будет отброшен в процессе токенизации стандартным анализатором. Вот почему наш предыдущий поисковый запрос совпал с фразой, не включающей дефис.

Это были основы фразового запроса.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий