面对大量数据时,不能一次性返回所有数据,也不能同时使用from、size多次返回数据,会对服务器造成较大压力,可以使用helpers.scan()方法轻松解决。
示例代码: 【grade库中共有数据1000*10000条数据】
from elasticsearch import Elasticsearch, helpers
import time
es = Elasticsearch(hosts='http://127.0.0.1:9200')
query = {
"query": {
"bool": {
"must": [
{"match": {
"name": "张三"
}
}
],
"filter": [
{"range": {
"id": {
"gte": 0
}
}}
]
}
}
}
start_time = time.time()
# helpers.scan()生成的是一个迭代器
res = helpers.scan(es, index="grade", scroll='2m', query=query, size=50000)
save_data = []
count = 0
for data in res:
print(count, data)
save_data.append(data)
count += 1
print(save_data[-10:])
print(len(save_data))
end_time = time.time()
print(f"耗时:{end_time - start_time}")
运行结果:
面对大量数据,除了使用scan(),还可以使用scroll()方法,详见博文:python在es中scroll用法详解_IT之一小佬的博客-CSDN博客
参考博文:
python读取、写入以及删除es数据_王家二小姐的博客-CSDN博客_python写es