我正在尝试对数组中的值进行聚合,并且还过滤由前缀返回的存储桶。不知道这是否可行,或者我滥用过滤桶。
3份文件:
{ "colors":["red","black","blue"] } { "colors":["red","black"] } { "colors":["red"] }
目的是获取带有字母B开头颜色的文档数量:
{ "size":0, "aggs" : { "colors" : { "filter" : { "prefix" : { "colors" : "b" } }, "aggs" : { "top-colors" : { "terms" : { "field":"colors" } } } } } }
不幸的是,返回的结果包括Red。显然是因为带有红色的文档仍然按过滤器匹配,因为它们也具有蓝色和/或黑色。
"aggregations": { "colors": { "doc_count": 2, "top-colors": { "buckets": [ { "key": "black", "doc_count": 2 }, { "key": "red", "doc_count": 2 }, { "key": "blue", "doc_count": 1 } ] } } }
有没有一种方法可以只过滤存储桶结果?
尝试此操作,它将过滤为存储桶本身创建的值:
{ "size": 0, "aggs": { "colors": { "filter": { "prefix": { "colors": "b" } }, "aggs": { "top-colors": { "terms": { "field": "colors", "include": { "pattern": "b.*" } } } } } } }