Elasticsearch:聚合已过滤的嵌套对象以查找唯一值 [英] Elasticsearch: Aggregation on filtered nested objects to find unique values
问题描述
我在Elasticsearch 5的每个文档中都有一个对象(标签)数组:
{
标签:[
{key:tag1,value:val1},
{key:tag2,value:val2},
...
]
}
现在我想查找唯一标签某个标签键的值。类似于这个SQL查询的东西:
到目前为止,我已经到过这个DSL: 但它向我显示了这个错误: SELECT DISTINCT(tags.value)FROM tags WHERE tags.key ='some-key'$
。
{
size:0,
aggs:{
my_tags:{
嵌套:{
path:tags
,
aggs:{
filter:{terms:{tags.key:tag1}},
aggs: {
my_tags_values:{
terms:{
field:tags.value,
size:9999
}
}
}
}
}
}
}
$ b $ p $ lt; code> [terms] unknown field [tags.key],parser not found
这是解决问题的正确方法吗?感谢您的帮助。
注意:我已将标签
字段声明为嵌套字段在我的映射。
您可能需要添加一个过滤器
聚合,但您没有任何名称:
{
size:0,
aggs:{
my_tags:{
嵌套:{
路径:tags
},
aggs:{
my_filter:{
filter:{
terms:{
tags.key:[
tag1
]
}
},
aggs:{
my_tags_values:{
条款:{
字段:tags.value,
大小:9999
}
}
}
}
}
}
}
}
I have an array of objects (tags) in each document in Elasticsearch 5:
{
"tags": [
{ "key": "tag1", "value": "val1" },
{ "key": "tag2", "value": "val2" },
...
]
}
Now I want to find unique tag values for a certain tag key. Something similiar to this SQL query:
SELECT DISTINCT(tags.value) FROM tags WHERE tags.key='some-key'
I have came to this DSL so far:
{
"size": 0,
"aggs": {
"my_tags": {
"nested": {
"path": "tags"
},
"aggs": {
"filter" : { "terms": { "tags.key": "tag1" } },
"aggs": {
"my_tags_values": {
"terms" : {
"field" : "tags.value",
"size": 9999
}
}
}
}
}
}
}
But It is showing me this error:
[terms] unknown field [tags.key], parser not found
.
Is this the right approach to solve the problem? Thanks for your help.
Note: I have declared the tags
field as a nested field in my mapping.
You mixed up things there. You wanted probably to add a filter
aggregation, but you didn't give it any name:
{
"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
}
}
}
}
}
}
}
}
这篇关于Elasticsearch:聚合已过滤的嵌套对象以查找唯一值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!