从弹性搜索中的2个不同字段的值进行聚合

时间:2015-05-26 09:59:36

标签: elasticsearch

我已将以下文档编入索引

{
"category" : "student",
"name" : "John",
"state" : "Florida",
"grade": "A"
}

我需要做的是在“州”和“等级”字段上进行双层聚合。也就是说,基本上我想知道每个州的等级分布。因此,执行此操作的常规方法是在字段“state”上应用聚合,并在字段“grade”上的该聚合内嵌套一个。但我可以一步完成同样的事情吗?

2 个答案:

答案 0 :(得分:1)

你是什么意思:

  

'但我可以一步完成同样的事情吗?'

以下请求将为每个州创建一个存储桶,然后为每个州的每个等级创建一个存储桶。您将在一个请求中获得每个州的成绩分配

{
  "query": {},
  "aggs": {
    "grouped_by_state": {
      "terms": {
        "field": "state"
      },
      "aggs": {
        "grades_distribution": {
          "terms": {
            "field": "grade"
          }
        }
      }
    }
  }
}

答案 1 :(得分:0)

我们可以使用脚本支持来实现这一点 -

{
  "aggs": {
    "terms": {
      "terms": {
"script" : "doc['state'].value + doc['grade'].value"
      }
    }
  }
}

这里我们附加这些字段的值来得到两者的排列。