2016-08-25 10 views
0

私はreIndex ElasticSearchを使用しようとしていますが、スキャンとバルクAPIを使用しましたが、非常に遅いです。 次のように私のpythonコード:reIndex ElasticSearchと並行する方法

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がこれをどのように実装するのかBean Wanderingをしました。私のインデックスは10ノードと20のシャードを持っています。

答えて

0

弾性検索では物事は平行です。あなたは各断片からヒットを得ています。しかし、クエリには常にいくつかの節を追加し、複数の検索を同時に実行することができます。たとえば、日付範囲または数値/アルファベットの範囲がこれでうまくいくかもしれません。

BTW。あなたはPythonを使用しているので、あなたの走行距離は糸と並行して変わることがあります。私は良い経験をスレッドの代わりにPythonのプロセスをフォークしてきた。以前は、たとえば次のような問題がありました。インタプリタをPythonでグローバルにロックしています。

+0

ありがとう、私は私の質問を変更しました。もう一度私を助けてください。 – Jack

+0

私のpythonは少し錆びますが、Pythonのmutliprocessingを使用して、複数のプロセスからのバルクインデックスリクエストを起動できます。 https://docs.python.org/2/library/multiprocessing.htmlを参照してください。上記のようにクエリを分割することができます。 –

+0

私はバルクをマルチプロセスする方法を知っていますが、問題はスキャンに約半分の時間がかかることです。たとえば、再インデックス処理全体が10時間かかりました。バルク部分を削除してスキャン部分のみを実行すると、5時間かかります。だから問題は、どのようにスキャン速度を早めることができるかということです。 – Jack

関連する問題