假设我有一个存储人物理属性的映射,以及该映射中作为用户ID的字段。例如:
"attributes": {
"hair_color": {
"type": "string"
},
"eyes_color": {
"type": "string"
},
"height": {
"type": "float"
},
"user_id": {
"type": "integer"
}
}
我正在尝试进行查询,以便返回有多少人拥有给定的眼睛颜色。例如,它会返回类似" green":962的内容。
我认为我需要做的是eye_color字段的术语桶,然后是考虑user_id的基数子聚合,但到目前为止我还没有成功。这就是我所拥有的:
{
"aggs" : {
"eyes_color_bucket" : {
"terms" : {
"field" : "eyes_color"
}
},
"aggs":{
"count":{
"cardinality":{
"field": "eyes_color_bucket"
}
}
}
}
当然失败了。任何帮助表示赞赏。
答案 0 :(得分:1)
你快到了,试试这样:
{
"size": 0,
"aggs": {
"eyes_color_bucket": {
"terms": {
"field": "eyes_color"
},
"aggs": {
"count": {
"cardinality": {
"field": "user_id"
}
}
}
}
}
}
<强>更新强>
继续下面的Richa评论,如果您假设一个用户只有一种眼睛颜色(即没有镜片或其他),您可以像这样简化聚合查询:
{
"size": 0,
"aggs": {
"eyes_color_bucket": {
"terms": {
"field": "eyes_color"
}
}
}
}
每个桶中的doc_count
应该是具有该眼睛颜色的用户数量。感谢@Richa提出这个问题。