迁移至Elasticsearch 8后,has parent query关联inner hits查询报错
解决Elasticsearch 8中Has Parent Query结合Inner Hits的报错问题
这个报错Couldn't find nested source for path when running inner hit query for has parent query的核心原因是:你在has_parent查询的inner_hits配置里错误添加了path参数——这个参数是给嵌套(nested)类型字段的inner hits用的,而父文档属于parent/child关系,根本不需要指定路径。
修复步骤:
- 检查你的查询语句,找到
inner_hits下的path配置项,直接删除它。 - 按需配置inner hits的其他参数(比如返回字段、数量限制等)即可。
错误示例(导致报错):
{ "query": { "has_parent": { "parent_type": "company", "query": { "match": { "name": "elastic" } }, "inner_hits": { "path": "company" // 这里就是多余的错误配置 } } } }
正确示例:
{ "query": { "has_parent": { "parent_type": "company", "query": { "match": { "name": "elastic" } }, "inner_hits": { "_source": ["name", "address"], // 按需指定返回的父文档字段 "size": 5 // 限制返回的父文档数量 } } } }
原理:Elasticsearch 8中,has_parent查询的inner hits会自动关联对应的父文档类型(由parent_type指定),不需要额外指定路径。错误添加path会让ES误以为你要查询嵌套字段,自然找不到对应的嵌套源,从而抛出报错。
内容的提问来源于stack exchange,提问作者gandhe hemanth
相关产品推荐
相关产品推荐

