Elasticsearch match_all查询API未返回全量文档如何解决
问题原因
Elasticsearch的_search接口默认配置size=10,单次查询默认仅返回排序后的前10条匹配文档,和查询条件的命中范围无关。从你提供的返回结果可以看到,hits.total.value值为210、relation为eq,说明match_all查询已经成功命中索引内全部210条文档,只是返回结果被默认分页规则截断,才只展示了10条记录。
解决方法
小数据量场景(总文档数低于10000,当前210条数据完全适用)
直接在查询请求中添加size参数,指定本次需要返回的文档总数即可拿到全量结果,示例请求如下:
192.168.20.47:9200/new/_search { "query" : { "match_all" : {} }, "size": 210 }
- 注意:Elasticsearch默认给单次查询设置了10000条的返回上限(由
index.max_result_window参数控制),不要为了拉取超大数据集随意把size设置为10000以上,这种操作会占用大量堆内存,严重时会直接导致集群节点服务异常。
大数据量全量拉取场景(总文档数≥10000)
不要通过调大size参数拉取全量,使用官方推荐的两种方案遍历全量文档:
scroll滚动查询:适合离线批量导出全量数据的场景,通过维护查询快照上下文分批拉取数据,性能稳定search_after深分页:适合实时性要求较高的分页遍历场景,依赖上一页最后一条文档的排序值拉取下一页内容,不受10000条返回上限的限制
内容的提问来源于stack exchange,提问作者Meikel Rizky Hartawan
相关产品推荐
相关产品推荐

