使用elasticsearch中的其他字段获取分组依据和不同的值计数

bejyjqdl  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(408)

我有一个索引,其文档结构如下-

{
  "key": ["10", "20"],
  "keywords": [
    {
      'case': 1,
      'word': 'abc' 
    },
    {
      'case': 2,
      'word': 'def'
    },
    {
      'case': 1
      'word': abcd
    }
  ]
}

我需要对key=10应用filter&获取文档中每个案例的不同单词数。有20个disict案例,因此此查询最多返回20个bucket。
过滤条件:键=10

预期结果集

[
    {
      'case': 1,
      'value': 2
    },
    {
      'case': 2,
      'value': 1
    }
  ]

与此对应的sql查询是-

select case, count(distinct words) as value 
from <table> where key = 10 and case in (1, 2, 3, 4) group by case;
km0tfn4u

km0tfn4u1#

首先将嵌套结构Map为es索引中的嵌套数据类型。

这里的Map参考

{
  "query": {
    "match": {
      "key": "123"
    }
  },
  "aggs": {
    "keywords": {
      "nested": {
        "path": "keywords"
      },
      "aggs": {
        "subjects": {
          "terms": {
            "field": "keywords.case.keyword"
          },
          "aggs": {
            "count": {
              "cardinality": {
                "field": "keywords.word.keyword",
                "precision_threshold": 4000
              }
            }
          }
        }
      }
    }
  },
  "size": 0
}

相关问题