Elasticsearch嵌套聚合逻辑调整求助:实现OR聚合+AND过滤
Elasticsearch嵌套聚合过滤逻辑问题求助
我的数据集包含productwaarden嵌套对象,数据示例如下:
文档1:
[ { "zoekbaar": false, "waarde": "BOL", "naam": "Leerweg", "filterbaar": true }, { "zoekbaar": false, "waarde": "2", "naam": "Foo", "filterbaar": true } ]
文档2:
[ { "zoekbaar": false, "waarde": "BBL", "naam": "Leerweg", "filterbaar": true }, { "zoekbaar": false, "waarde": "1", "naam": "Foo", "filterbaar": true } ]
需求说明
按naam对应的waarde过滤时,聚合需采用OR逻辑(组内),仅在naam维度使用AND逻辑。举例:
- 选择BOL作为过滤条件时,聚合结果需同时包含BOL和BBL;
- 仅选择BOL时,Foo对应的聚合值仅为2(文档2的1不匹配过滤条件)。
当前查询代码
{ "aggs": { "productwaarden.nested": { "nested": { "path": "productwaarden" }, "aggs": { "productwaarden.filtered": { "filter": { "bool": { "must": { "term": { "productwaarden.filterbaar": true } } } }, "aggs": { "naam": { "terms": { "field": "productwaarden.naam.aggregate", "size": 1000 }, "aggs": { "waarde": { "terms": { "field": "productwaarden.waarde.aggregate", "size": 1000 } } } } } } } } }, "query": { "constant_score": { "filter": { "bool": { "must": [ { "nested": { "path": "productwaarden", "query": { "bool": { "must": [ { "term": { "productwaarden.naam.aggregate": "Leerweg" } }, { "terms": { "productwaarden.waarde.aggregate": ["BBL"] } } ] } } } } ] } } } } }
补充说明
UI中“Leerweg”组包含BBL和BOL两个选项,选择BBL时需将其从查询结果中排除,但保留在聚合结果中,组内为OR逻辑。
内容的提问来源于stack exchange,提问作者Pim Jansen
相关产品推荐
相关产品推荐

