Filter 将聚合限制为筛选器的结果
给定一组在一个字段中具有给定值的文档,我想知道有多少文档在第二个字段中具有每个值 我尝试通过以下查询的术语聚合来实现这一点:Filter 将聚合限制为筛选器的结果,filter,elasticsearch,aggregation,Filter,elasticsearch,Aggregation,给定一组在一个字段中具有给定值的文档,我想知道有多少文档在第二个字段中具有每个值 我尝试通过以下查询的术语聚合来实现这一点: { "size": 0, "filter": { "term": { "field1": "value" } }, "aggregations": { "field2" : { "terms" : { "field" : "field2" }
{
"size": 0,
"filter": {
"term": {
"field1": "value"
}
},
"aggregations": {
"field2" : {
"terms" : { "field" : "field2" }
}
}
}
但是返回的计数显示了整个索引中第二个字段的每个值的文档数,而不限于第一个字段具有给定值的文档数
我做错了什么?您尝试过使用过滤查询吗
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"field1": "value"
}
}
}
},
"aggregations": {
"field2": {
"terms": { "field": "field2" }
}
}
}
这里有一个比较: 简言之,顶级过滤器的作用就像链接中的post_过滤器。要过滤然后计算聚合,需要使用查询
如果您担心查询中的分数计算会对性能造成影响,您可以研究常量分数查询,它基本上是一个过滤器包装器查询。但是建议使用过滤器而不是查询来按精确值进行过滤?另一个问题:如何应用多个条件?过滤器提供了一个,没有发现的查询…我想知道同样的我自己。。。所以,如果我们需要使用聚合,我们基本上应该停止同时使用过滤器?那似乎不是right@VitorM是的,聚合始终在查询范围内运行(默认情况下,
match\u all
)。不,您不应该停止对聚合使用过滤器。有一种方法可以缩小过滤器的性能和缓存范围,然后有一种方法可以为其子聚集过滤聚合桶。将这两种方法结合起来可以实现真正强大的过滤。