elasticsearch - 多个领域的 Elasticsearch 聚合

标签 elasticsearch aggregation

我是 flex 搜索的新手,我想在其上实现特定的用例。我想要一个多字段总和聚合。我将尝试在示例中进行解释:
我将以下对象插入es索引:

{"a":"aval", "b":"bval", "c":"cval", "aggcount":100}

其中a,b和是字符串,而aggcount是一个整数。
现在,假设我已索引以下记录:
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11}
{"a":"aa", "b":"b", "c":"c", "aggcount":1}
{"a":"a", "b":"bb", "c":"cc", "aggcount":12}
{"a":"a", "b":"bb", "c":"cc", "aggcount":5}

现在,我想按字段a,b和c对记录进行分组,并对它们的总计数值求和,因此对于以前的记录,我将得到以下结果:
{"a":"aa", "b":"bb", "c":"cc", "count":21}
{"a":"aa", "b":"b", "c":"c", "count":1}
{"a":"a", "b":"bb", "c":"cc", "aggcount":17}

有人可以告诉我如何实现吗?我尝试嵌套的ificant_terms和求和聚合,但未成功。
提前致谢。

最佳答案

使用子聚合:

{
  "aggs": {
    "aggs_a": {
      "terms": {
        "field": "a"
      },
      "aggs": {
        "aggs_b": {
          "terms": {
            "field": "b"
          },
          "aggs": {
            "aggs_c": {
              "terms": {
                "field": "c"
              },
              "aggs": {
                "summing": {
                  "sum": {
                    "field": "aggcount"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

测试数据和结果:
POST /test_index/test_type/_bulk
{"index":{}}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10}
{"index":{}}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11}
{"index":{}}
{"a":"aa", "b":"b", "c":"c", "aggcount":1}
{"index":{}}
{"a":"a", "b":"bb", "c":"cc", "aggcount":12}
{"index":{}}
{"a":"a", "b":"bb", "c":"cc", "aggcount":5}

给出:
   "hits": {
      "total": 5,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "aggs_a": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": "aa",
               "doc_count": 3,
               "aggs_b": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "bb",
                        "doc_count": 2,
                        "aggs_c": {
                           "doc_count_error_upper_bound": 0,
                           "sum_other_doc_count": 0,
                           "buckets": [
                              {
                                 "key": "cc",
                                 "doc_count": 2,
                                 "summing": {
                                    "value": 21
                                 }
                              }
                           ]}},
                     {
                        "key": "b",
                        "doc_count": 1,
                        "aggs_c": {
                           "doc_count_error_upper_bound": 0,
                           "sum_other_doc_count": 0,
                           "buckets": [
                              {
                                 "key": "c",
                                 "doc_count": 1,
                                 "summing": {
                                    "value": 1
                                 }
                              }
                           ]}]}
            },
            {
               "key": "a",
               "doc_count": 2,
               "aggs_b": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "bb",
                        "doc_count": 2,
                        "aggs_c": {
                           "doc_count_error_upper_bound": 0,
                           "sum_other_doc_count": 0,
                           "buckets": [
                              {
                                 "key": "cc",
                                 "doc_count": 2,
                                 "summing": {
                                    "value": 17
                                 }
                              }
                           ]
}}]}}]}}}

关于elasticsearch - 多个领域的 Elasticsearch 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30231903/

相关文章:

elasticsearch - 多个匹配项提高词条查询结果的分数

elasticsearch - 如何将Elasticsearch与ms sql上的数据一起使用?

r - 如何分解由列表列表组成的数据框

elasticsearch - Elasticsearch 中的嵌套过滤具有多个相同嵌套类型的术语

python - Pandas:根据组进行不同的聚合

indexing - 如何从 elasticsearch 中检索旧版本文档?

elasticsearch - 未分配分片的Elasticsearch索引红色

lucene - 在 Elasticsearch 中组合单独的查询

aggregation - ArangoDB 分面搜索性能

javascript - 使用工厂函数聚合绑定(bind)中的多个控件