ElasticSearch 从数组字段中过滤聚合
ElasticSearch Filtering aggregations from array field
我正在尝试对数组中的值进行聚合,并过滤由前缀返回的桶。不确定这是否可行,或者我误用了过滤桶。
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" } }
}
}
}
}
不幸的是,返回的结果包括红色。显然是因为带有红色的文档仍然被过滤器匹配,因为它们也有蓝色 and/or 黑色。
"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.*"
}
}
}
}
}
}
}
我正在尝试对数组中的值进行聚合,并过滤由前缀返回的桶。不确定这是否可行,或者我误用了过滤桶。
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" } }
}
}
}
}
不幸的是,返回的结果包括红色。显然是因为带有红色的文档仍然被过滤器匹配,因为它们也有蓝色 and/or 黑色。
"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.*"
}
}
}
}
}
}
}