Вложенный многоэлементный запрос Elastic Search
Таким образом, моя проблема в основном такая же, как описано здесь, однако она все еще остается без ответа в группе.
Мое отображение:
{
"abstract": {
"properties": {
"summary": {
"type": "string"
}
}
},
"authors": {
"type": "nested",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
}
}
}
}
И я хотел бы выполнить полнотекстовый поиск по обоим этим полям, возможно, с неравномерным весом. Запрос, который приходит мне в голову, но, к сожалению, не работает, будет следующим:
{
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "higgs boson",
"fields": ["abstract.summary^5", "author.last_name^2"]
}
}]
}
}
}
Я не получаю никаких результатов от поля авторов из-за его вложенного отображения. Я также не могу избавиться от вложенного свойства - я использую его для агрегации. Любая изящная идея, как ее решить?
2 ответа
Единственное решение, которое мне удалось выработать, которое не удобно и не элегантно, но как-то работает, это такой запрос:
"query": {
"bool": {
"should": [
{
"nested": {
"path": "authors",
"query": {
"multi_match": {
"query": "higgs",
"fields": ["last_name^2"]
}
}
}
},
{
"multi_match": {
"query": "higgs",
"fields": ["abstract.summary^5"]
}
}
]
}
}
Я также не уверен, будет ли повышение работать так, как ожидалось, при условии, что оно установлено в разных запросах. Любые предложения приветствуются.
Изменение вашего отображения на следующее, которое использует include_in_root: true
позволит вам использовать запрос, который вы первоначально написали:
{
"abstract": {
"properties": {
"summary": {
"type": "string"
}
}
},
"authors": {
"type": "nested",
"include_in_root": true,
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
}
}
}
}
Вы можете захотеть индексировать внутренние объекты как в виде вложенных полей, так и в виде плоских полей объекта. Это может быть достигнуто установкой include_in_parent на true. - Ссылка
Замечания: include_in_root
может быть устаревшим в будущих версиях эластичного поиска в пользу copy_to
,