对于这么多的文档,您可能希望使用scan and scroll API。 许多客户端库都有现成的帮助器来使用该接口。例如,使用elasticsearch-py,您可以执行以下操作:
es = elasticsearch.Elasticsearch(eshost)
scroll = elasticsearch.helpers.scan(es, query='{"fields": "_id"}', index=idxname, scroll='10s')
for res in scroll:
print res['_id']
3条答案
按热度按时间s4n0splo1#
我只需要导出整个索引并读取文件系统。当处理数百万的查询结果集时,我使用size/from和scan/scroll的经验是灾难性的。只是需要太长时间。
如果你可以使用像knapsack这样的工具,你可以将索引导出到文件系统,然后遍历目录。每个文档都存储在它自己的以_id命名的目录下。不需要真正打开文件。只需遍历目录。
背包链接:https://github.com/jprante/elasticsearch-knapsack
编辑:希望你不是经常这样做......或者这可能不是一个可行的解决方案
nle07wnf2#
对于这么多的文档,您可能希望使用scan and scroll API。
许多客户端库都有现成的帮助器来使用该接口。例如,使用elasticsearch-py,您可以执行以下操作:
字符串
6tr1vspr3#
首先,您可以发出请求以获取索引中记录的完整计数。
字符串
然后,您需要使用
size
和from
参数的组合来遍历集合,直到达到总计数。传递空的field
参数将仅返回您感兴趣的索引和_id。找到一个合适的
page
大小,您可以在不耗尽内存的情况下使用它,并在每次迭代时递增from
。型
项目响应示例:
型