我有一个充满文件的索引。他们每个人都有一个关键的“用户ID”,每个用户都有一个不同的值,但是每个用户可能有多个文档。每个用户都有其他属性(例如“颜色”,“动物”)。

我需要获取每个属性的汇总计数,具体如下:

aggs: {
   colors: { terms: { field: color } },
   animals: { terms: { field: animal } }
}

但是我需要每个唯一用户标识的这些计数,也许是:
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"}
                   }
                }
            }
          }
       }
    }
}'

关于elasticsearch - 基于唯一键的术语汇总,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27484789/

10-13 09:18