我有一个Elasticsearch文档索引,其中有一个包含URL列表的字段。在此字段上聚合可以按预期方式为我提供唯一URL的计数。
GET models*/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"links": {
"terms": {
"field": "links.keyword",
"size": 10
}
}
}
}
然后我想过滤掉其键不包含某个字符串的桶。我试过用Bucket Selector Aggregation这样做。
这个尝试:
GET models*/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"links": {
"terms": {
"field": "links.keyword",
"size": 10
}
},
"links_key_filter": {
"bucket_selector": {
"buckets_path": {
"key": "links"
},
"script": "!key.contains('foo')"
}
}
}
}
失败:
名为[bucket_selector]的[queue_key_filter]的无效管道聚合。顶层只允许兄弟管道聚合
将存储桶选择器放在链接聚合中,如下所示:
GET models*/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"links": {
"terms": {
"field": "links.keyword",
"size": 10
},
"bucket_selector": {
"buckets_path": {
"key": "links"
},
"script": "!key.contains('foo')"
}
}
}
}
失败了:
在[links]中找到两个聚合类型定义:[terms]和[bucket_selector]
我要继续修补,但此刻有点卡住:(
您可以使用“_key”来获取密钥:
GET models*/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"links": {
"terms": {
"field": "links.keyword",
"size": 10
},
"bucket_selector": {
"buckets_path": {
"key": "_key"
},
"script": "!params.key.contains('foo')"
}
}
}
}
GET models*/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"links": {
"terms": {
"field": "links.keyword",
"size": 10
}
},
"bucket_selector": {
"buckets_path": {
"key": "links"
},
"script": "!key.contains('foo')"
}
}
}
您的选择器应该升级,它应该直接在aggs中并与选择器组并行。我不确定密钥过滤