Именованные запросы OpenSearch - примеры использования и примеры кода

В OpenSearch есть функция, которая, возможно, не очень известна, но очень полезна для различных целей. Как следует из названия, именованные запросы - это функция, которая позволяет обозначать запросы именем. В большинстве поисковых приложений у вас есть более одного запроса в шаблоне запроса. Это могут быть разные шаблоны или шаблон запроса с несколькими подзапросами, каждый из которых соответствует определенному требованию поиска.

Если вы добавите имя к каждому из этих низкоуровневых запросов, OpenSearch вернет список всех совпадающих запросов в ответ на каждое попадание.

Это может быть использовано в различных случаях:

Пример 1 - отладка запросов

Отладка запросов может быть значительно упрощена при использовании именованных запросов. Приходилось ли вам когда-нибудь использовать функцию _explain? Функция explain рассказывает, как именно вычислялась оценка. Это может быть полезно, но часто это слишком подробно и очень трудно для чтения.

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

Вариант использования 2 - специфическая логика запросов

Именованные запросы могут быть полезны, если вам нужна очень специфическая логика запроса, реализованная в бэкенде.

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

С помощью именованных запросов очень легко реализовать эту функцию элегантным способом. Вам не нужно запускать 2 параллельных запроса, не нужно разбирать результаты запроса и применять логику, которую OpenSearch уже сделал за вас. Вы просто проверяете, не было ли среди ваших хитов точного совпадения в ID товара по названию, и затем выводите его.

Пример

Query - укажите имя для каждого пункта запроса:

Response - просто используйте содержимое "matched_queries" для дальнейшей обработки в вашем бэкенд-приложении:

Вариант использования 3 - диверсификация результатов поиска

Еще один типичный случай использования - диверсификация результатов поиска. Вы можете захотеть сгруппировать результаты по категориям и показывать только лучшие результаты в каждой категории. Это можно легко сделать, сгруппировав результаты по определенному имени запроса в бэкенде и отобразив только лучшие хиты в каждой категории.

Вариант использования 4 - ведение журнала

Еще один важный вариант использования именованных запросов - протоколирование. Если вы ведете логгирование всех запросов, то чтение всего JSON может быть слишком большим и нечитабельным.

Если же вы будете записывать в журнал только условия запроса и совпавшие с ними запросы, а также некоторые показатели производительности, то читать и понимать их будет гораздо проще.

Пример именованного запроса

Давайте рассмотрим пример:

Сначала проиндексируем 2 документа выборки. Затем выполним bool-запрос по этому индексу. Запрос bool содержит 2 условия "should", каждое из которых помечено именем. В результате мы сможем увидеть, какие из пунктов запроса совпали.

В результате запроса мы видим каждое совпадение с дополнительным параметром под названием "matched_queries". В нем содержатся все запросы, которые были найдены для этого документа:

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