繁体   English   中英

Elasticsearch - 部分bool查询的聚合

[英]Elasticsearch - Aggregations on part of bool query

说我有这个bool查询:

"bool" : {
    "should" : [
        { "term" : { "FirstName" : "Sandra" } },
        { "term" : { "LastName" : "Jones" } }
     ],
     "minimum_should_match" : 1
}

这意味着我要匹配所有名字为Sandra的姓氏或姓氏琼斯。

现在,有没有什么方法可以对所有匹配第一个术语的文档进行聚合?

例如,我希望得到任何名为Sandra的人都能获得“奖品”的所有独特价值。 通常我会这样做:

"query": {
    "match": {
        "FirstName": "Sandra"
    }
},
"aggs": {
    "Prizes": {
        "terms": {
            "field": "Prizes"
        }
    }
}

有没有办法将这两者结合起来,所以我只需要执行一个查询,返回名字为Sandra或姓氏为Jones的所有人,并且只对名字为Sandra的人进行聚合?

非常感谢!

使用post_filter。 请参考以下查询。 Post_filter将确保您的bool should子句不会影响您的聚合范围。

聚合也基于主查询进行过滤,但它们不受post_filter的影响。 请参阅链接

{
    "from": 0,
    "size": 20,
    "aggs": {
        "filtered_lastname": {
            "filter": {
                "query": {
                    "match": {
                        "FirstName": "sandra"
                    }
                }
            },
            "aggs": {
                "prizes": {
                    "terms": {
                        "field": "Prizes",
                        "size": 10
                    }
                }
            }
        }
    },
    "post_filter": {
        "bool": {
            "should": [{
                "term": {
                    "FirstName": "Sandra"
                }
            }, {
                "term": {
                    "LastName": "Jones"
                }
            }],
            "minimum_should_match": 1
        }
    }
}

在汇总奖品之前在aggs内部运行过滤器可以帮助您实现所需的用例。

谢谢希望这有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM