赞
踩
思路通常使用from+size组合可以便利一定数据量(index.max_result_window),超过限制就es就报错了,想要读取超过index.max_result_window的数据就需要使用scroll进行翻页操作,scroll相当于使用了一个接口自身维护的以及游标(下标)去es中获取数据,每次scroll都会返回下一次scoll的id地址,直到最终hits.hits长度为0(表示已读取当前Index的数据)
search中的sroll表示上面说的下标的存活时间,之后便不可用了;size表示一次读取多少条数据;
- def read_es(es,search_index):
- #检查index是否存在
- if es.indices.exists(index=search_index):
- print('{} not find in es'.format(search_index))
- return []
-
-
- page = es.search(index=search_index,scroll="20m",size=100)
- scroll_id = page['_scroll_id']
- scroll_size = page['hits']['total']['value']
- for source in page['hits']['hits']:
- func(source)
-
- while scorll_size>0:
- page = es.scroll(scoll_id=scroll_id,scroll="20m")
- scroll_id = page['_scroll_id']
- scroll_size = len(page['hits']['hits'])
- for source in page['hits']['hits']:
- func(source)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。