我在Elasticsearch 5中的每个文档中都有一个对象(标签)数组:
{
"tags": [
{ "key": "tag1", "value": "val1" },
{ "key": "tag2", "value": "val2" },
...
]
}
现在我想找到某个标记键的唯一标记值。与此SQL查询类似的东西:
SELECT DISTINCT(tags.value) FROM tags WHERE tags.key='some-key'
到目前为止,我已经来到这个DSL了:
{
"size": 0,
"aggs": {
"my_tags": {
"nested": {
"path": "tags"
},
"aggs": {
"filter" : { "terms": { "tags.key": "tag1" } },
"aggs": {
"my_tags_values": {
"terms" : {
"field" : "tags.value",
"size": 9999
}
}
}
}
}
}
}
但它向我显示了这个错误:
[terms] unknown field [tags.key], parser not found
。
这是解决问题的正确方法吗?谢谢你的帮助。
注意:我已将tags
字段声明为映射中的嵌套字段。
答案 0 :(得分:1)
filter
聚合,但您没有给它任何名称:
{
"size": 0,
"aggs": {
"my_tags": {
"nested": {
"path": "tags"
},
"aggs": {
"my_filter": {
"filter": {
"terms": {
"tags.key": [
"tag1"
]
}
},
"aggs": {
"my_tags_values": {
"terms": {
"field": "tags.value",
"size": 9999
}
}
}
}
}
}
}
}
答案 1 :(得分:0)
在Filter-Aggregation中尝试Bool Query:
{
"size": 0,
"aggs": {
"my_tags": {
"nested": {
"path": "tags"
},
"aggs": {
"filter": {
"bool": {
"must": [
{
"term": {
"tags.key": "tag1"
}
}
]
},
"aggs": {
"my_tags_values": {
"terms": {
"field": "tags.value",
"size": 0
}
}
}
}
}
}
}
}
BTW:如果要检索所有存储桶,可以在聚合大小中编写0
而不是9999
。