前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >记录一次 Elasticsearch 聚合结果不准确的问题

记录一次 Elasticsearch 聚合结果不准确的问题

原创
作者头像
惜儿
发布2023-11-23 14:44:16
发布2023-11-23 14:44:16
31800
代码可运行
举报
文章被收录于专栏:大数据生态大数据生态
运行总次数:0
代码可运行

问题

agg聚合函数查询后,返回 bucket 中的值都是相同的

使用的代码如下:

代码语言:javascript
代码运行次数:0
复制
TermsAggregationBuilder terms1 = AggregationBuilders.terms("brands_max_num").field("equipCode");
TermsAggregationBuilder terms2 = AggregationBuilders.terms("timeCount").field("receivedTimeStamp");

        SearchSourceBuilder querySourceBuilder = new SearchSourceBuilder().aggregation(terms1.subAggregation(terms2)).size(0);

通常在kibana上也能复现:

代码语言:javascript
代码运行次数:0
复制
GET ecc_bc_20211017/_search
{
  "query": {
    "match": {
      "gpsId": "31854137"
    }
  },
  "size": 0,
  "aggs": {
    "brands_max_num": {
      "terms": {
        "field": "equipCode"
      },
      "aggs": {
        "timeCount": {
          "terms": {
            "field": "receivedTimeStamp"
          }
        }
      }
    }
  }
}

原因分析

agg 函数默认是分10个bucket ,在数据量大的情况下就会不准确。

解决方法

增加 bucket 的个数

代码语言:javascript
代码运行次数:0
复制
GET ecc_bc_20211017/_search
{
  "query": {
    "match": {
      "gpsId": "31854137"
    }
  },
  "size": 0,
  "aggs": {
    "brands_max_num": {
      "terms": {
        "field": "equipCode"
      },
      "aggs": {
        "timeCount": {
          "terms": {
            "field": "receivedTimeStamp",
            "size": 100
          }
        }
      }
    }
  }
}

Java 在构建TermsAggregationBuilder 时指定size

代码语言:javascript
代码运行次数:0
复制
TermsAggregationBuilder terms2 = AggregationBuilders.terms("timeCount").field("receivedTimeStamp").size(100); 

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

邀请人:岳涛,社区ID:7348459

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 原因分析
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档