给定一组在一个字段中具有给定值的文档,我想知道有多少文档具有第二个字段的每个值。
我尝试使用以下查询进行术语聚合:
{
"size": 0,
"filter": {
"term": {
"field1": "value"
}
},
"aggregations": {
"field2" : {
"terms" : { "field" : "field2" }
}
}
}
但返回的计数显示整个索引中第二个字段的每个值的文档数,而不限于第一个字段具有给定值的文档。
我做错了什么?
答案 0 :(得分:27)
您是否尝试过使用过滤查询?
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"field1": "value"
}
}
}
},
"aggregations": {
"field2": {
"terms": { "field": "field2" }
}
}
}
答案 1 :(得分:8)
这里有一个比较: https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html
简而言之,您的顶级过滤器就像链接中的post_filter一样。要过滤,然后计算聚合,您需要使用查询。
如果您因为查询中得分的计算而担心性能下降,您可以查看基本上是过滤器包装查询的常量得分查询。