根据elasticsearch中两个不同字段的值进行聚合

bvjxkvbb  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(364)

我索引了如下文档

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

我需要做的是在“state”和“grade”字段上进行双层聚合。也就是说,基本上我想知道每个州的分数分布。因此,通常的方法是在字段“state”上应用聚合,并在字段“grade”上的聚合中嵌套一个。但是我能在一个步骤中做同样的事情吗?

kqlmhetl

kqlmhetl1#

你所说的:
“不过,我能一步到位吗?”
下面的请求将为每个状态创建一个bucket,然后为每个状态的每个级别创建一个bucket。你可以在一个请求中得到每个州的分数分布

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

4nkexdtk2#

我们可以通过脚本支持来实现-

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

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

相关问题