【发布时间】:2017-11-23 14:59:08
【问题描述】:
我有一个文档的 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')"
}
}
}
}
失败:
名为 [links_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]
我会继续修修补补,但现在有点卡住了:(
【问题讨论】:
-
我认为在第二种情况下,您缺少
aggs聚合应该去的links_key_filter部分 -
你能弄明白吗?你是怎么做到的?
标签: elasticsearch key-value aggregation bucket