Теперь, когда вы увидели, как искать по всем или определенным полям, давайте рассмотрим, как можно внедрить логику булевых операций в строку запроса.
Давайте выполним поиск по полю name, как мы делали в предыдущей статье, но на этот раз добавим круглые скобки. Внутри круглых скобок мы добавим термин pasta, за которым последует логический оператор. В этом примере мы используем AND, а после него добавим термин "спагетти". Этот запрос ищет продукты, которые содержат в названии оба термина - паста и спагетти.
1 | GET /ecommerce/product/_search?q=name:(pasta AND spaghetti) |
Это дает только один результат. Если мы заменим оператор boolean на or, то получим больше результатов.
1 | GET /ecommerce/product/_search?q=name:(pasta OR spaghetti) |
Можно также создать более сложную логику, просто добавив больше булевых операторов в круглые скобки. Попробуем рассмотреть другой пример, в котором мы включаем несколько полей. Скажем, например, что мы хотим найти активные продукты, в названии которых есть слова "макароны" или "спагетти".
1 | GET /ecommerce/product/_search?q=(name:(pasta OR spaghetti) AND status:active) |
Как видите, это позволяет осуществлять довольно мощный поиск.
Вы также можете использовать булевы операторы в самой строке запроса для еще большего контроля. Префикс термина со знаком + означает, что этот термин должен присутствовать, а префикс со знаком - означает, что он не должен присутствовать. Любые термины без префикса в таком запросе являются необязательными. Это похоже на то, как можно сделать в поиске Google. Давайте рассмотрим небольшой пример. Мы скажем, что термин паста должен присутствовать, а термин спагетти не должен присутствовать.
1 | GET /ecommerce/_search?q=name:+pasta -spaghetti |
Просматривая результаты поиска, мы увидим, что продукт с названием Pasta - Spaghetti больше не возвращается.