ElasticSearch从数组字段过滤聚合

我正在尝试对数组中的值进行聚合,并且还过滤由前缀返回的存储桶。不知道这是否可行,或者我滥用过滤桶。

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.*"

}

}

}

}

}

}

}

以上是 ElasticSearch从数组字段过滤聚合 的全部内容, 来源链接: utcz.com/qa/432554.html

回到顶部