Elasticsearch:如何过滤inner_hits仅返回cp值为true的嵌套文档
解决Elasticsearch嵌套字段过滤问题
我懂你的困扰——明明要筛选data.addresses.ces.cp为true的条目,结果inner_hits里还是混进了cp=false的内容。这是因为你当前的外层嵌套查询只是确认某个addresses下存在符合条件的ces元素,但inner_hits默认会返回该addresses下所有ces数组项,不会自动过滤不符合要求的元素。
要精准拿到目标内容,你需要在inner_hits内部也添加对应的过滤条件,确保只返回cp=true的ces条目。修改后的查询如下:
{ "_source": "created_at", "size": 1, "sort": [ { "created_at.keyword": { "order": "desc" } } ], "query": { "nested": { "path": "data.addresses", "inner_hits": { "_source": ["data.addresses.ces.secondname", "data.addresses.ces.cp"], "size": 100, "query": { "nested": { "path": "data.addresses.ces", "query": { "match": { "data.addresses.ces.cp": "true" } } } } }, "query": { "nested": { "path": "data.addresses.ces", "query": { "match": { "data.addresses.ces.cp": "true" } } } } } } }
关键修改说明:
- 在
inner_hits对象中新增了query字段,同样用nested查询针对data.addresses.ces路径,过滤cp=true的元素。这样inner_hits就只会返回符合该条件的ces条目,而非整个数组。
修改后你会得到预期的正确输出:
"ces" : [ { "secondname" : "lopez", "cp" : true } ]
内容的提问来源于stack exchange,提问作者Miguel Barrios
相关产品推荐
相关产品推荐

