如果一个字段的值在多个文档中相同,我想要文档的数量。如何编写DSL查询?
示例:
假设我有这些文件:
{ _id:1, foo:1}
{ _id:2, foo:1}
{ _id:3, foo:3}
{ _id:4, foo:2}
{ _id:5, foo:3}
如果在多个文档中找到相同的foo值,我想要文件计数。在这里,我希望计数为2。
更新
将术语查询运行为:
{
"size": 0,
"aggs": {
"counts": {
"terms": {
"field": "foo"
}
}
}
}
我得到了这个结果:
'aggregations':{
'counts':{
'buckets':[
{'doc_count': 221,'key': '10284'},
{'doc_count': 71,'key': '6486'},
{'doc_count': 71,'key': '7395'}
],
'doc_count_error_upper_bound': 0,
'sum_other_doc_count': 0
}
}
我希望另一个字段为total_count
,其值为3,因为有3个密钥,doc_count超过1.我该怎么做?
答案 0 :(得分:1)
您可以在terms
字段上尝试简单的foo
聚合,如下所示:
{
"size": 0,
"aggs": {
"counts": {
"terms": {
"field": "foo"
}
}
}
}
运行此功能后,您将获得
答案 1 :(得分:0)
我认为你不能只用ES开箱即可。在min_doc_count: 2
terms
聚合后,您基本上需要一个桶数。
在ES 5中,您将拥有:https://github.com/elastic/elasticsearch/issues/19553(对于bucket_selector
聚合,可以使用_bucket_count
变量。还有待观察该变量是否也可用于其他脚本。