可以使用ElasticSearch的聚合(aggregation)功能来实现根据jcx分组统计sjid去重的结果。

具体的聚合查询语句如下:

GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "group_by_jcx": {
      "terms": {
        "field": "jcx.keyword"
      },
      "aggs": {
        "distinct_sjid": {
          "cardinality": {
            "field": "sjid.keyword"
          }
        }
      }
    }
  }
}

解释一下上述查询语句:

  • size:查询结果的大小,这里设为0表示只返回聚合结果,不返回具体的文档数据。
  • aggs:指定聚合查询语句的聚合条件。
  • group_by_jcx:根据jcx字段进行分组聚合。
  • terms:指定按照哪个字段进行分组,这里使用了jcx.keyword,表示使用jcx字段的关键字类型进行分组。
  • distinct_sjid:对于每个分组,统计sjid字段的去重个数。
  • cardinality:使用cardinality聚合函数,表示统计去重个数。
  • field:指定聚合函数作用的字段,这里使用了sjid.keyword,表示使用sjid字段的关键字类型进行统计。

执行上述查询语句后,可以得到类似如下的结果:

{
  "aggregations": {
    "group_by_jcx": {
      "buckets": [
        {
          "key": "jcx1",
          "doc_count": 100,
          "distinct_sjid": {
            "value": 50
          }
        },
        {
          "key": "jcx2",
          "doc_count": 200,
          "distinct_sjid": {
            "value": 80
          }
        },
        ...
      ]
    }
  }
}

这里的结果表示按照jcx字段进行分组聚合的结果,每个分组的名称为key,对应的文档个数为doc_count,统计出去重后的sjid个数为distinct_sjid.value。

写一个ElasticSearch中根据jcx分组统计sjid去重的结果

原文地址: https://www.cveoy.top/t/topic/bH2V 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录