我有一个完整的文件索引。 他们每个人都有一个关键的“用户ID”与每个用户的独特价值,但每个用户可以拥有多个文档。 每个用户具有附加属性(如“颜色”,“动物”)。
我需要得到每个属性这将是AGG计数:
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 } }
}
}
我看着嵌套聚合,但没有得到它,如果他们会有所帮助。
这可能吗?
嵌套的条件(在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"}
}
}
}
}
}
}
}'
以下是我终于从对方的回答和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
}
} ]
}
}
}