Elasticsearch嵌套对象关联过滤异常问题求助
Elasticsearch嵌套对象查询修正方案
问题根源
你的查询未使用nested类型查询,导致scopeId和categoryName的条件被跨嵌套对象匹配——即文档中只要存在任意一个嵌套对象满足scopeId,同时存在任意一个嵌套对象满足categoryName,就会被命中,而非要求同一个嵌套对象同时满足两个条件。
修正后的查询语句
1. 过滤scopeId:3228553且categoryName为"lap"(预期返回0条结果)
{ "query": { "nested": { "path": "mappedCategories", "query": { "bool": { "must": [ { "term": { "mappedCategories.scopeId": 3228553 } }, { "match": { "mappedCategories.categoryName": "lap" } } ] } }, "inner_hits": {} } } }
2. 搜索scopeId:3228552且categoryName包含"book"(预期返回2条嵌套对象结果)
{ "query": { "nested": { "path": "mappedCategories", "query": { "bool": { "must": [ { "term": { "mappedCategories.scopeId": 3228552 } }, { "match": { "mappedCategories.categoryName": "book" } } ] } }, "inner_hits": { "size": 10 } } } }
关键说明
nested查询会将查询范围限定在path指定的嵌套对象内部,确保所有条件都匹配同一个嵌套文档,避免跨对象的误匹配。inner_hits用于返回具体匹配的嵌套对象条目,而非仅返回父文档。设置size可控制返回的匹配条目数量,确保不会遗漏符合条件的结果。
内容的提问来源于stack exchange,提问作者Zeeshan Arif
相关产品推荐
相关产品推荐

