Elasticsearch查询命中45条但仅返回10条结果是什么原因
问题原因
Elasticsearch 的 _search API 存在默认分页配置:未手动指定参数时,单次查询的返回文档条数上限由 size 参数的默认值控制,固定为10。
你看到返回结果里标记的总hits数45,是匹配查询条件的文档总计数,不是本次请求实际返回的文档条数,和hits数组里的实际返回数量不冲突。
解决方法
- 单次查询需要返回指定条数时,直接在请求中携带
size参数指定单页返回数量即可,比如要拉取全部45条文档,查询命令修改为:
curl -XGET "http://localhost:9200/contextual_original/_search?size=45&pretty"
- 常规分页场景可以搭配
from参数使用,from代表结果偏移量,默认值为0(即从第一条匹配结果开始返回)。例如要获取第11-20条结果,可传参from=10&size=10。 - 注意不要把
size设置为超过10000的极大值,否则会占用大量服务端内存,拖慢查询性能甚至引发集群异常。如果需要拉取万条以上的全量匹配数据,建议使用scroll接口或者search_after参数做分批深度拉取。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

