Я использую этот запрос для получения документов из 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():
, но в документах говорится об preserve_order
параметре :
Обратите внимание, что это может быть чрезвычайно дорогостоящей операцией и может легко привести к непредсказуемым результатам, используйтес осторожностью.
Действительно, я убедился, что он возвращает некоторые документы не по порядку.
Так что в качестве альтернативы я рассматриваю использование регулярной итерации сканирования + сортировку с sortedcontainers module.
Есть ли лучшая альтернатива?