ElastaticSearch -- es深度分页 searchAfter

searchAfter深度分页

es一次只能查1万条数据,如果超过1万,会报错如下:

复制代码
        "reason": {
          "type": "query_phase_execution_exception",
          "reason": "Result window is too large, from + size must be less than or equal to: [10000] but was [10001]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting."
        }

可以调整es配置的index.max_result_window这个参数,来查询更多的数据,但这并不是很好的办法,最好使用 searchAfter.

searchAfter作用类似于以下sql语句:

复制代码
-- 查询第10001--10005条数据
SELECT * FROM  t_user  order by name,birthDay  LIMIT 10000,5;

dsl

  • 第一次查询,查询1--10000条数据,找出第10000条数据的排序字段结果

    GET /user_info/_search
    {
    "size": 10000,
    "sort": [{
    "name": {
    "order": "asc"
    }
    },
    {
    "birthDay": {
    "order": "desc"
    }
    }]
    }

  • 第二次查询,根据上面最后一条数据的排序字段,查询出第 10001--20000条数据;
    多了一个search_after的查询条件,对应的排序字段为第一步查出来的最后一条数据(也就是第10000条数据)的排序字段

    GET /user_info/_search
    {
    "size": 10000,
    "sort": [{
    "name": {
    "order": "asc"
    }
    },
    {
    "birthDay": {
    "order": "desc"
    }
    }],
    "search_after": ["wang", "1993-12-01"]
    }

java代码

复制代码
    public SearchSourceBuilder searchAfterTest() {
        SearchSourceBuilder searc = new SearchSourceBuilder().size(10000);

        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolQuery.filter(QueryBuilders.termQuery("province", "深圳市"));

        searc.sort("name", SortOrder.ASC).sort("birthDay", SortOrder.DESC);

        String[] searchAfter = new String[]{"wang", "1993-12-01"};
        searc.searchAfter(searchAfter);

        return searc.query(boolQuery);
    }
相关推荐
普通网友3 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
虫小宝3 小时前
优惠券省钱APP查询性能优化:Elasticsearch与Canal实现的多维度商品搜索毫秒级响应方案
elasticsearch·性能优化·jenkins
leoZ23115 小时前
10-Git 仓库蒸馏术:从代码仓库到 OpenClaw 虚拟人-蒸馏工具链
大数据·git·深度学习·神经网络·目标检测·elasticsearch·lstm
艾伦_耶格宇16 小时前
【DOCKER容器实战】-3 ElasticSearch + Kibana
elasticsearch·docker·jenkins
Sayai2 天前
Elasticsearch 日志索引设计:按小时切分 + 小时内 Rollover 兜底(ILM 实战,附完整脚本)
大数据·elasticsearch·搜索引擎
Elasticsearch2 天前
生产环境向量搜索的一个设置:vectordb_document 模式如何自动调优 Elasticsearch
elasticsearch
【赫兹威客】浩哥2 天前
基于SpringBoot+Vue3的舆情文本分析系统|Elasticsearch检索+情感分析+话题热度追踪 毕设项目
spring boot·elasticsearch·课程设计
玉&心2 天前
在grafana中加入elasticsearch的日志dashboard
elasticsearch·grafana
Elasticsearch2 天前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
elasticsearch
Elastic 中国社区官方博客2 天前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索