#elasticsearch
Вопрос:
Я новичок в elasticsearch, и у меня возникли проблемы при поиске по всем полям с несколькими ключевыми словами. Например, если я поищу во всех своих полях термин: foo
я получу все свои результаты обратно.
Но если я выполняю поиск по всем полям foo bar
, он возвращает результаты только из одного поля, в котором есть foo и панель, когда я знаю, что в 1 поле есть элементы с foo, а в другом поле-панель.
Если я выполню поиск по всем полям foo "bar"
, он будет работать правильно и вернет все результаты по всем полям, но на самом деле я не хочу пытаться объяснить пользователям предложения пользователей на втором сроке.
Есть идеи, где я ошибаюсь?
Запрос:
{
"query": {
"bool": {
"must": {
"query_string": {
"fields": ["heading, title, content, call_number"],
"query": "foo bar",
"default_operator": "AND"
}
}
}
}
}
Ответ №1:
Вы можете использовать multi_match с типом cross_fields. Попробуйте выполнить следующий запрос
{
"query": {
"multi_match" : {
"query": "foo bar",
"type": "cross_fields",
"fields": [ "heading", "title" ]
}
}
}
Результаты поиска:
"hits": [
{
"_index": "69109590",
"_type": "_doc",
"_id": "2",
"_score": 0.2876821,
"_source": {
"title": "bar"
}
},
{
"_index": "69109590",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"heading": "foo"
}
}
]
Ответ №2:
То, что вы ищете, — это combined_fields
поисковый запрос
Запрос combined_fields поддерживает поиск по нескольким текстовым полям, как если бы их содержимое было проиндексировано в одном объединенном поле. подробнее
{
"query": {
"combined_fields": {
"query": "foo bar",
"fields": [
"heading",
"title",
"content",
"call_number"
],
"operator": "and"
}
}
}