我有一个充满文件的索引。他们每个人都有一个密钥" userid"每个用户具有不同的值,但每个用户可能有多个文档。每个用户都有其他属性(例如"颜色","动物")。
我需要获得每个属性的聚合计数:
aggs: {
colors: { terms: { field: color } },
animals: { terms: { field: animal } }
}
但我需要每个唯一用户ID的这些计数,可能:
aggs: {
group-by: { field: userid },
sub-aggs: {
colors: { terms: { field: color } },
animals: { terms: { field: animal } }
}
}
我查看了嵌套聚合,但是如果他们有帮助则没有得到它。
这可能吗?
答案 0 :(得分:2)
要嵌套术语(类似于SQL中的GROUP BY),只需创建更多聚合级别。
目前尚不清楚您希望在最低级别获得的总数,但此查询将返回三个不同级别的文档计数:
curl -XGET 'http://localhost:9200/myindex/mypets/_search?pretty' -d '{
"query": {
"query_string": { "query":"some query", "fields": ["field1", "field2"]}
},
"aggs" : {
"userid_agg" : {
"terms": { "field" : "userid"},
"aggs" : {
"colors_agg" : {
"terms": { "field" : "color"},
"aggs" : {
"animals_agg" : {
"terms": { "field" : "animal"}
}
}
}
}
}
}
}'
答案 1 :(得分:1)
以下是我最后通过其他答案和ES文档中的提示找到的内容:
curl -sSd '
{
"aggs" : {
"colors" : {
"aggs" : {
"users" : {
"cardinality" : {
"field" : "userid"
}
}
},
"terms" : {
"field" : "color"
}
}
}
}' 'http://localhost:9200/index/type/_search?size=0&pretty'
{
"took" : 806,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 5288447,
"max_score" : 0.0,
"hits" : [ ]
},
"index" : {
"colors" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "red",
"doc_count" : 1185936,
"users" : {
"value" : 776440
}
}, {
"key" : "green",
"doc_count" : 1104816,
"users" : {
"value" : 758189
}
} ]
}
}
}