【问题标题】:Get group by and distinct count of values using other field in Elasticsearch使用 Elasticsearch 中的其他字段获取分组依据和不同的值计数
【发布时间】:2021-09-24 04:31:56
【问题描述】:

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

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

我需要在 key=10 上应用过滤器并获取文档中每种情况下不同单词的计数。有 20 种不同的情况,所以这个查询最多返回 20 个桶。

过滤条件: 键 = 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;

【问题讨论】:

    标签: elasticsearch solr lucene elastic-stack elasticsearch-dsl


    【解决方案1】:

    首先将嵌套结构映射为ES索引中的嵌套数据类型。

    映射Reference here

    {
      "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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 2016-10-17
      • 2018-07-28
      • 2021-02-15
      相关资源
      最近更新 更多