我正在使用此查询从ES中检索按timestamp
字段排序的文档:
from elasticsearch_dsl import Search
s = Search(using=es, index='gps_points', doc_type="gps_point")
s = s.filter("range", timestamp={'gte': start_timestamp, 'lte': end_timestamp})
s = s.sort("timestamp")
s = s[0:10000]
r = s.execute()
for point in s:
....
要检索超过10000个排序的文档,我发现了这种替代的迭代方法:
for point in s.params(preserve_order=True).scan():
但docs says this about the preserve_order
param:
请注意,这可能是非常昂贵的操作,并且很容易 导致不可预测的结果,请谨慎使用。
事实上,我已经证实它确实会乱序返回一些文档。
因此,我正在考虑使用常规的扫描迭代+通过sortedcontainers模块进行排序。
还有更好的选择吗?