1.search_after
# -*- coding: utf-8 -*-
from elasticsearch import Elasticsearch# 初始化客户端
es = Elasticsearch(hosts=["http://192.168.1.134:19200"],http_auth=("elastic", "elastic"), # 如果有鉴权timeout=60
)index_name = "metric_pl"
page_size = 2 # 每页数量
sort_field = "timestamp" # 你要排序的字段,比如时间戳
sort_order = "desc" # "asc" 或 "desc"search_after = None
has_more = Truewhile has_more:body = {"size": page_size,"sort": [{sort_field: {"order": sort_order}},{"_id": "desc"} # 避免 sort 值相同导致翻页丢数据]}if search_after:body["search_after"] = search_afterres = es.search(index=index_name, body=body)hits = res["hits"]["hits"]if not hits:has_more = Falsebreakfor doc in hits:print(doc["_id"], doc["_source"].get(sort_field))# 取最后一条的 sort 值作为下一页的起点search_after = hits[-1]["sort"]print(search_after)

