Вложенный многоэлементный запрос 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,

Другие вопросы по тегам