В этой статье мы поговорим об использовании фразы query при поиске с помощью строк запроса.
По умолчанию все термины являются необязательными, если хотя бы один из них совпадает. Это связано с тем, что по умолчанию используется логический оператор OR. Мы можем увидеть это, если будем искать спагетти с макаронами.
1 | GET /ecommerce/product/_search?q=name:pasta spaghetti |
Если мы посмотрим на результаты, то увидим, что они включают продукты, в названии которых есть только макароны.
Но что, если мы хотим выполнить поиск по конкретной фразе? Это можно сделать, заключив фразу в кавычки. Давайте добавим кавычки в запрос, который мы только что выполнили.
1 | GET /ecommerce/product/_search?q=name: "pasta spaghetti" |
Теперь мы получим только один результат - документ, содержащий в своем названии и пасту, и спагетти, причем в таком порядке. Чтобы продемонстрировать, что порядок имеет значение, давайте попробуем поменять местами термины во фразе.
1 | GET /ecommerce/product/_search?q=name: "spaghetti pasta" |
Обратите внимание, что продукт больше не соответствует запросу, потому что порядок терминов не совпадает. Давайте снова изменим порядок и вернемся к предыдущему результату поиска.
1 | GET /ecommerce/product/_search?q=name: "pasta spaghetti" |
Обратите внимание, что в названии продукта также присутствует дефис ("макароны - спагетти"), так почему же эта фраза совпадает? Ответ связан с тем, как Elasticsearch анализирует документы, когда они добавляются в индекс или их значения изменяются. По умолчанию используется стандартный анализатор, поэтому давайте просто проверим, как анализируется название этого продукта. Для этого существует удобный API _analyze, который возвращает условия после того, как предоставленное значение было токенизировано. Мы установим анализатор на стандартный и передадим название продукта в качестве текста для анализа.
1 | GET /_analyze?analyzer=standard&text=Pasta - Spaghetti |
Результатом будет список лексем, причем дефис будет отброшен в процессе токенизации стандартным анализатором. Вот почему наш предыдущий поисковый запрос совпал с фразой, не включающей дефис.
Это были основы фразового запроса.