ElasticSearch的java分组后分页——关于BucketSortPipelineAggregationBuilder的问题

es 聚合后进行分页(非标准分页,涉及到es底层的检索方式)
es 桶聚合后排序介绍见ES指南介绍

// kibana对聚合后的数据
GET /_search
{
  "query": {
    "bool": { 
      "filter": [
        {
          "match": {
            "question": "好的"
          }
        },
        {
          "range": {
            "createTime": {
              "gte": 1605283200000,
              "lte": 1610726400000
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "by_sessionId": {
      "terms": {
        "field": "sessionId",
        // 查询的聚合数据量,需要大于from+size,具体多少合适需要自己测试
        "size": 100
      },
      "aggs": {
        "bucket_field": {
          "bucket_sort": {
          		//可添加"sort"字段排序,默认按照doc_count降序
          		// 分页(聚合结果截取)
              "from": 0,
              "size": 10
          }
        }
      }
    }
  }, 
  "size": 0
}
TermsAggregationBuilder sessionIdBuilder = AggregationBuilders
        .terms("by_sessionId")
        .field("sessionId")
        .size(100)
        .subAggregation(new BucketSortPipelineAggregationBuilder("bucket_sort", null)
            .from(0)
            .size(10));

注意问题:

BucketSortPipelineAggregationBuilder类不存在

当我们在maven中将elasticsearch的版本从7.x降级到6.x的时候发现,找不到BucketSortPipelineAggregationBuilder类。

但是在kibana中发现是可以使用bucket sort的。

此时我们进行代码分析:

  • TermsAggregationBuilder调用BucketSortPipelineAggregationBuilder使用的是第二种方法

在这里插入图片描述

  • 发现PipelineAggregationBuilder抽象类存在BucketSortPipelineAggregationBuilder子类

在这里插入图片描述

  • 进入BucketSortPipelineAggregationBuilder,发现6.x与7.x的类路径不同
// 6.x包路径
org.elasticsearch.search.aggregations.pipeline.bucketsort
// 7.x包路径
org.elasticsearch.search.aggregations.pipeline

 

おすすめ

転載: blog.csdn.net/HD243608836/article/details/121037494