愚者求师之过,智者从师之长。

elasticsearch from size 分页问题

Elasticsearch | 作者 MoFanDon | 发布于2019年04月12日 | 阅读数:5423

1. es 版本5.5 
2. es 是三台服务器的集群。
3. es 索引 5个分配,两个复制分片。
 
 我有一个 type 有 1w 多条的文档记录。
index 设置的最大查询size 是1w
使用 bool查询,查询某个type下的全量数据,
查询如下 : 
---在程序里构造must 条件,没有传条件,则must 为空,来获取所有的文档。
{
"query": {
"bool": {
"must": [
]
}
},
"from":0,
"size":10000

}
 
使用了while 循环,如果total > 1w ,则from += 1w 然后再次查询,并且汇总数据和返回。
 
这时出现问题了:
汇总后的数据里,有数据重复。
 
后来看了一下,查询的文档,打分都是1.
"_score": 1,
 
【问题】
1. 通过bool 查询得到的结果,使用from size 的分页查询,是不是就有问题,不能这么用?
2.如果我需要使用 from size 来分页,是不是我还必须要指定一个 唯一的字段作为排序字段来排序呢?
 
 
 
 
已邀请:

kepmoving - 90后

赞同来自: MoFanDon

查询的时候按id排序,你这样查询是无序的,es查询是分布式的,每次查询可能打到不同的分片,汇聚的结果的排序是随机的

rochy - rochy_he

赞同来自:

推荐使用 matchAllQuery 排序的字段为 _doc,
如果你的结果超过了 1W 条,不推荐 from+size 的方式获取数据
推荐使用 scroll 的方式,类似传统数据库的游标

要回复问题请先登录注册