Background
刚接触ElasticSearch不久,公司让我帮忙去导一下数据,刚开始数量并不是很大,我都是用Elasticsearch python的api接口,一条一条数据去往新的index里插. 但是马上又有了千万级别的数据需要操作,如果还是老办法,会特别慢,而且不够稳定。于是去查了一下资料。关于Elasticsearch的python api文档很少,中文的就更少了,官方稳定又不是很详细,只是大概得到一个信息,可以用bulk() api去操作大量的数据。
Solution:
我需要解决的问题有两个:
查询多个Index中的内容,然后将满足条件的数据写到新的一个Index中:
这个问题比较简单,elasticsearch 的helpers module提供了一个完美的方法来做这件事:reindex()
elasticsearch.helpers.reindex(client, source_index, target_index, query=None,target_client=None, chunk_size=500, scroll=u'5m', scan_kwargs={}, bulk_kwargs={})
这个方法的参数,提供了source_index(可以是List), target_index, query以及 scroll_size 和 scroll的保存时间,所以直接跑就可以了。
批量更新现有Index中的所有数据,给每个document增加一个field并赋值:
官方文档中的api 签名是这样的:
elasticsearch.helpers