问题现象

在对es做group by分组聚合查询时,数据返回不正确,只能显示十条。但是应该有14个分组。

查询语句:

GET /hadoop_impala*/_search
{
  "aggs": {
    "qyeryTypes": {
      "terms": {
        "field": "hostId"
      }
    }
  }
}

查询结果:

"aggregations": {
    "qyeryTypes": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 611,
      "buckets": [
        {
          "key": "dx-hadoop62.dx",
          "doc_count": 877
        },
        {
          "key": "dx-hadoop60.dx",
          "doc_count": 828
        },
        {
          "key": "dx-hadoop61.dx",
          "doc_count": 703
        },
        {
          "key": "dx-hadoop58.dx",
          "doc_count": 637
        },
        {
          "key": "dx-hadoop68.dx",
          "doc_count": 611
        },
        {
          "key": "dx-hadoop64.dx",
          "doc_count": 474
        },
        {
          "key": "dx-hadoop69.dx",
          "doc_count": 449
        },
        {
          "key": "dx-hadoop70.dx",
          "doc_count": 230
        },
        {
          "key": "dx-hadoop65.dx",
          "doc_count": 211
        },
        {
          "key": "dx-hadoop59.dx",
          "doc_count": 179
        }
      ]
    }

问题原因:

因为es聚合操作的size参数规定了最后返回的term个数(默认是10个)

解决方案:

在es查询里添加size参数,如下:

GET /hadoop_impala*/_search
{
  "aggs": {
    "qyeryTypes": {
      "terms": {
        "field": "hostId",
        "size": 1000
      }
    }
  }
}

再次查询,结果能正常返回

"aggregations": {
    "qyeryTypes": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "dx-hadoop62.dx",
          "doc_count": 893
        },
        {
          "key": "dx-hadoop60.dx",
          "doc_count": 840
        },
        {
          "key": "dx-hadoop61.dx",
          "doc_count": 713
        },
        {
          "key": "dx-hadoop58.dx",
          "doc_count": 647
        },
        {
          "key": "dx-hadoop68.dx",
          "doc_count": 611
        },
        {
          "key": "dx-hadoop64.dx",
          "doc_count": 474
        },
        {
          "key": "dx-hadoop69.dx",
          "doc_count": 459
        },
        {
          "key": "dx-hadoop70.dx",
          "doc_count": 230
        },
        {
          "key": "dx-hadoop65.dx",
          "doc_count": 214
        },
        {
          "key": "dx-hadoop63.dx",
          "doc_count": 183
        },
        {
          "key": "dx-hadoop59.dx",
          "doc_count": 181
        },
        {
          "key": "dx-hadoop57.dx",
          "doc_count": 165
        },
        {
          "key": "dx-hadoop56.dx",
          "doc_count": 152
        },
        {
          "key": "dx-hadoop67.dx",
          "doc_count": 137
        }
      ]
    }
  }

扩展:

  • size参数规定了最后返回的term个数(默认是10个)
  • shard_size参数规定了每个分片上返回的个数
  • 如果shard_size小于size,那么分片也会按照size指定的个数计算

通过这两个参数,如果我们想要返回前5个,size=5;shard_size可以设置大于5,这样每个分片返回的词条信息就会增多,相应的误差几率也会减小。

参考:https://www.cnblogs.com/tgzhu/p/9167170.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐