Как реализовать смешанный тип поиска в query_string режиме в elasticsearch?

Пользователь

от fidel , в категории: SQL , 7 месяцев назад

Как реализовать смешанный тип поиска в query_string режиме в elasticsearch?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от kenya , 7 месяцев назад

@fidel 

Для реализации смешанного типа поиска в query_string режиме в Elasticsearch можно использовать синтаксис Lucene Query Parser.


В качестве примера, допустим у нас есть индекс my_index с документами, содержащими поля title и description. Для поиска по обоим полям с использованием query_string запроса можно использовать следующий синтаксис:

1
2
3
4
5
6
7
8
GET my_index/_search
{
  "query": {
    "query_string": {
      "query": "(title:foo OR description:foo) AND (title:bar OR description:bar)"
    }
  }
}


В этом примере мы ищем документы, где в поле title или description содержится слово foo и одновременно в поле title или description содержится слово bar.


Если вы хотите установить определенные настройки для вашего запроса, такие как минимальное количество совпадений (minimum_should_match) или использование оператора "или" (OR) вместо оператора "и" (AND), вы можете указать их в соответствующих полях запроса query_string.


Например, для использования оператора "или" вместо оператора "и", можно добавить параметр default_operator: "OR":

1
2
3
4
5
6
7
8
9
GET my_index/_search
{
  "query": {
    "query_string": {
      "query": "title:foo description:foo title:bar description:bar",
      "default_operator": "OR"
    }
  }
}


Это означает, что Elasticsearch будет возвращать документы, где встречается хотя бы одно из искомых слов (foo или bar) в поле title или description.