• Elasticsearch7.4 spring boot 使用 RestHighLevelClient实现searchAfter分页


    官网searchafter介绍:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/paginate-search-results.html#search-after

    官网介绍的查询返回如下:

    {
      "pit_id" : "46ToAwEPbXktaW5kZXgtMDAwMDAxFnVzaTVuenpUVGQ2TFNheUxVUG5LVVEAFldicVdzOFFtVHZTZDFoWWowTGkwS0EAAAAAAAAAAAQURzZzcUszUUJ5U1NMX3Jyak5ET0wBFnVzaTVuenpUVGQ2TFNheUxVUG5LVVEAAA==", 
      "took" : 17,
      "timed_out" : false,
      "_shards" : ...,
      "hits" : {
        "total" : ...,
        "max_score" : null,
        "hits" : [
          ...
          {
            "_index" : "my-index-000001",
            "_id" : "FaslK3QBySSL_rrj9zM5",
            "_score" : null,
            "_source" : ...,
            "sort" : [                                
              4098435132000,
              "FaslK3QBySSL_rrj9zM5"
            ]
          }
        ]
      }
    }

    其中,sort数组长度为2.

    但在实现测试中发现7.4版本es查询返回时,长度为一

    {
      "took" : 191,
      "timed_out" : false,
      "_shards" : {
        "total" : 2,
        "successful" : 2,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 10000,
          "relation" : "gte"
        },
        "max_score" : null,
        "hits" : [
          {
            "_index" : "atc_drg_stat",
            "_type" : "man",
            "_id" : "1000",
            "_score" : null,
            "_source" : {
              "district_code" : "DistrictCode",
              ---------------
            },
            "sort" : [
              1000
            ]

    不知道是否是版本变化引起的。

    POM文件如下:

    <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>7.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-client</artifactId>
                <version>7.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>7.3.2</version>
            </dependency>

    代码如下:

    @RequestMapping("/searchAfter")
        public void searchAfter() throws IOException {
            String searchAfter =null;
            Object[] objects = new Object[]{};
            try {
                for (int i = 0; i < 100; i++) {
                    SearchRequest searchRequest = new SearchRequest(index);
                    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
                    searchSourceBuilder.query(matchQuery("year_month", "yearMonth"));
                    searchSourceBuilder.size(1000);
                    searchSourceBuilder.sort("sort_id", SortOrder.ASC);
                    if(objects.length>0) {
                        searchSourceBuilder.searchAfter(objects);
                    }
                    searchRequest.source(searchSourceBuilder);
                    System.out.println(searchRequest.source().toString());
                    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
                    System.out.println(searchResponse);
                    SearchHit[] hits = searchResponse.getHits().getHits();
                    objects = hits[hits.length-1].getSortValues();
    
                    System.out.println(hits);
                }
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    Java提高篇(三四)-----fail-fast机制
    opencv提取surf特征点出现的错误
    Android开发_Gson解析
    关于权限管理设计文章整理,希望对大家有所帮助
    URAL
    JAVA编程心得-多态设计初步
    paip. mysql如何临时 暂时 禁用 关闭 触发器
    Citrix服务器虚拟化之三十 XenApp 6.5发布流式应用程序
    在TextView使用部分颜色文字
    微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列
  • 原文地址:https://www.cnblogs.com/hankuikui/p/13711095.html
Copyright © 2020-2023  润新知