0

我正在尝试重新索引 ElasticSearch,我使用了 Scan 和 Bulk API,但它非常慢,我怎样才能并行处理以使其更快。我的python代码如下:

actions=[]
for hit in helpers.scan(es,scroll='20m',index=INDEX,doc_type=TYPE,params=
     {"size":100}):
    value= hit.get('_source')
    idval = hit.get('_id')
    action = indexAction(INDEX_2,TYPE_2,idval,value)
    actions.append(action)
    count+=1
    if(count%200==0):
        helpers.bulk(es, actions,stats_only=True,params=
        {"consistency":"one","chunk_size":200})
        actions=[]

我应该进行扫描多个进程还是应该进行批量多个进程。我一直在徘徊 ElasticSearch-Hadoop 如何实现这一点。我的索引有 10 个节点和 20 个分片。

4

1 回答 1

0

在弹性搜索方面,事情是平行的。您会从每个碎片中获得命中。但是您总是可以在查询中添加一些子句,然后简单地同时运行多个搜索。例如,日期范围或数字/字母范围可能适用于此。

顺便提一句。由于您使用的是 python,因此您的里程可能会与线程同时执行不同的操作。我有很好的经验分叉进程而不是使用 python 的线程。例如,在 python 中对解释器进行全局锁定时会出现问题。

于 2016-08-25T15:17:08.167 回答