我有一个Elasticsearch查询,它具有这样的聚合:
"aggs" : {
"my_buckets": {
"composite" : {
"sources" : [
{ "abc.firstfield":
{ "terms" :
{ "field": "abc.firstfield" }
}
},
{ "abc.secondfield":
{ "terms" :
{ "field": "abc.secondfield" }
}
}
], "size": 10000
}
}
}
最初的意图是,第一字段和第二字段都具有相同的值,并且对(例如,存储)第一字段或第二字段中具有ABC的项目数进行计数(“存储”)。不过,这并不是一个存储桶,因为这意味着文档可以放入两个存储桶(如果firstfield或secondfield不同)。但是请继续解决我当前的问题。因此,据我所知,这种聚合只是具有firstfield + secondfield存储桶,对我来说也足够了。问题是,在某些情况下,例如,缺少秒字段,就没有第一字段:某物,第二字段:空的存储桶。因此,很多元素都无法使用。
我该怎么做才能得到类似的结果,但像是像桶装一样
{
"key": {
"abc.firstfield": "abcd"
},
"doc_count": 123
}
我只看到了这种可能的方法,但这意味着我必须确保firstfield始终可用:
"aggs": {
"first": {
"terms": {
"size": 10000,
"field": "abc.firstfield"
},
"aggs": {
"second": {
"terms": {
"size": 10000,
"field": "abc.secondfield"
}
}
}
}
}
而且我的口味解析起来有点混乱。
{
"aggs": {
"my_buckets": {
"composite": {
"sources": [
{
"field1": {
"terms": {
"field": "field1.keyword",
"missing_bucket": true
}
}
},
{
"field2": {
"terms": {
"field": "field2.keyword",
"missing_bucket": true
}
}
}
],
"size": 10000
}
}
}
}
结果:
"buckets" : [ { "key" : { "field1" : "abc", "field2" : "xyz" }, "doc_count" : 1 }, { "key" : { "field1" : "def", "field2" : null }, "doc_count" : 1 } ]