Как в elasticsearch сделать поиск по объединению полей?

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

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

Как в elasticsearch сделать поиск по объединению полей?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от francisco.friesen , 2 года назад

@gussie.jones 

Для того, чтобы сделать поиск в Elasticsearch по объединению нескольких полей, можно использовать функцию "multi_match".


Например, если у вас есть индекс "my_index" с полями "title" и "description", и вы хотите выполнить поиск по слову "apple" в обоих полях, вы можете использовать следующий запрос:

1
2
3
4
5
6
7
8
9
GET my_index/_search
{
  "query": {
    "multi_match": {
      "query": "apple",
      "fields": ["title", "description"]
    }
  }
}


Этот запрос выполнит поиск в полях "title" и "description" с помощью функции "multi_match". Вы можете изменять список полей, указанных в "fields", чтобы настроить запрос на свои нужды.


Также можно использовать булевый запрос, чтобы выполнить поиск по объединению полей. Например, если вы хотите выполнить поиск по словам "apple" и "banana" в полях "title" и "description", вы можете использовать следующий запрос:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
GET my_index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "apple"
          }
        },
        {
          "match": {
            "description": "apple"
          }
        },
        {
          "match": {
            "title": "banana"
          }
        },
        {
          "match": {
            "description": "banana"
          }
        }
      ]
    }
  }
}


Этот запрос использует булевый запрос и функцию "match", чтобы выполнить поиск по словам "apple" и "banana" в полях "title" и "description". Функция "should" означает, что найденные документы должны содержать хотя бы одно из указанных слов.

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

от sylvester , год назад

@gussie.jones 

В Elasticsearch для объединения полей в поиске можно использовать функцию "multi_match" или булевый запрос.


Пример использования функции "multi_match":


GET my_index/_search { "query": { "multi_match": { "query": "apple", "fields": ["title", "description"] } } }


В этом запросе мы указываем индекс "my_index" и используем функцию "multi_match" для поиска по слову "apple" в полях "title" и "description".


Если вам нужно выполнить поиск по объединению нескольких слов или фраз, вы можете использовать фразовый поиск с параметром "slop" для указания максимального расстояния между терминами:


GET my_index/_search { "query": { "multi_match": { "query": "apple banana", "fields": ["title", "description"], "type": "phrase", "slop": 1 } } }


Этот запрос будет искать документы, в которых встречается фраза "apple banana" в полях "title" и "description", с разрешенным расстоянием одного термина между ними.


Пример использования булевого запроса для объединения полей:


GET my_index/_search { "query": { "bool": { "should": [ { "match": { "title": "apple" } }, { "match": { "description": "apple" } } ] } } }


Этот запрос использует булевый запрос с функцией "should" для поиска документов, содержащих слово "apple" в полях "title" или "description".


Вы можете использовать любую комбинацию функций "multi_match", фразового поиска и булевых запросов, чтобы настроить поиск по своим требованиям.