You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch 7.10如何并行批量获取排序文档?类Oracle DBMS_PARALLEL_EXECUTE

Elasticsearch 7.10.2 并行批量获取3000万条数据方案咨询

背景与需求

  • 正在测试Elasticsearch 7.10.2的PIT(Point in Time)+search_after功能,需从ES中提取3000万条数据,每页设置为10万条
  • 当前单页获取耗时:VPN环境约1.5分钟,远程机器约30秒,速度过慢,需要实现并行获取
  • 参考Oracle的实现:借助DBMS_PARALLEL_EXECUTE.run_task和DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_NUMBER_COL工具,按数字类型带索引的ID列分片,并行度设为20时,1分钟内可获取约3000万行数据,希望了解ES是否有原生类似的分片并行批量获取能力

当前遇到的问题

  • search_after依赖排序顺序,必须获取前一页的排序值才能发起下一页请求,无法并行执行分片任务
  • ES中无可用作分片依据的数字型索引ID列:仅有的FIELD1(同时作为_id)是由15位数字组成的字符串,但该字段不是keyword类型,且无法修改索引定义,不能基于它进行排序
  • 无法对_id(字符串类型)和FIELD1(非keyword类型)执行max/min聚合,即便二者可按数字顺序排序,也无法获取范围分片的起止点,无法基于_id做范围分片查询

当前使用的查询语句

首次查询:

{
  "query": {
    "wildcard": {
      "companyId": {
        "value": "40*"
      }
    }
  },
  "fields":[
        "FIELD1", "FIELD2"
  ],
  "sort": {"_id": "asc"},
  "size": 100000,
  "_source": false,
  "pit": {
        "id": "<a very long id>",
        "keep_alive": "1m"
  },
  "track_total_hits": false
}

第2至n次查询会添加以下参数:

"search_after": ["<last hit value of FIELD1 from previous page>"]

内容的提问来源于stack exchange,提问作者WesternGun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:16:05