Elasticsearch: Поиск с помощью Query DSL: полнотекстовые запросы

Теперь, когда мы рассмотрели, как искать с помощью строк запросов, я покажу вам, как выполнять поиск, определяя запросы в теле запроса в JSON. Этот подход называется Query DSL.

Elasticsearch

Первый запрос, который я собираюсь вам показать, - это запрос, который соответствует всем документам, подобно тому, как мы использовали подстановочный знак звездочки в строке запроса в предыдущей статье. Теперь, вместо добавления параметра q к URI, мы указываем наш запрос в теле запроса в виде JSON.

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

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

Но что, если вы хотите выполнить поиск по нескольким полям? Теоретически, это можно сделать с помощью булевой логики, используя запрос bool (который мы рассмотрим в одной из следующих лекций). Однако в этом случае вам придется создавать множество подобных запросов, в которых различаются только поля. Вместо этого можно использовать запрос multi_match, который позволяет выполнять запросы на совпадение нескольких полей. Позвольте мне показать вам пример, в котором я ищу термин "макароны" в полях "название" и "описание".

Далее я покажу вам, как искать фразы с помощью запроса DSL, используя запрос match_phrase.

Теперь мы получаем один результат, который содержит термины "паста" и "спагетти" в названии и в таком порядке. Помните, что если мы поменяем термины местами, этот документ больше не будет соответствовать.

Это все, что касается полнотекстового поиска при использовании DSL запроса. Спасибо за чтение и удачного поиска!

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