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

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

от fidel , в категории: SQL , 2 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от kenya , 2 года назад

@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.

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

от yasmine , 9 месяцев назад

@fidel 

Реализация смешанного типа поиска в query_string режиме в elasticsearch может быть осуществлена с помощью синтаксиса Lucene Query Parser.


Пример такого запроса может выглядеть следующим образом:

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)"
    }
  }
}


В этом примере мы используем операторы OR и AND для комбинирования условий поиска. В поле query указываем условия поиска для полей title и description, ищем документы, содержащие слово "foo" в поле title или description, и одновременно слово "bar" в поле title или description.


Также, для настройки дополнительных параметров запроса, таких как минимальное количество совпадений (minimum_should_match) или использование оператора OR вместо оператора AND, можно указать эти параметры в соответствующих полях запроса query_string. Например, для использования оператора OR вместо оператора AND, можно добавить параметр 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.