2017-01-16 9 views
1

私はElasticSearchに新しいデータを挿入しようとすると、私はPythonで壁に当たっています。ElasticSearch不良インサート属性

ElasticSearchとPythonスクリプトの間の接続は同じサーバー上で実行されますが、私がそれを実行しているときに私のreqeustのインデックスを作成しようとしています。

それは私が考えるように、1000リクエストやsomtingのように処理するのに長い時間がかかります。

私はスクリプトを実行してから再インデックスを実行する前にインデックスを挿入しないでください。

私のピトンコードはこのように見えます。その助けることができる場合

es = Elasticsearch([{'host': str(config['elastic']['host']), 'port': str(config['elastic']['port'])}]) 

res = es.index(index="test-index", doc_type='products', id=product['uuid'], body=data) 
print(res['created']) 

が、その後、私は、データベース内のわずか約200から250.000書類を持って、私は理解できない理由thatsの理由をその挿入がとても遅い、およびインデックスから取得することは非常に速いです。

最終的なコードサンプル - バルクに

es = Elasticsearch([{'host': str(config['elastic']['host']), 'port': str(config['elastic']['port'])}]) 

data = {'field':'value'} 

bulk = "" 

bulk = bulk + '{"_op_type": "index", "_index": "index-name", "_type": "doc-type", "_id": "id-need-effect", "doc" : "'+ json.dumps(data) +'"}\n' 

bulk = bulk + '{"_op_type": "delete", "_index": "index-name", "_type": "doc-type", "_id": "id-want-to-delete"}\n' 

es.bulk(body=bulk) 

思い出してくれる新しい行ごとに使用する方法は、新しい(\ n)を追加し、この場合には、あなたはもはや私が前に打つperfomcesの問題にヒットしません。

+0

が見https://www.elastic.co/guide/en/elasticsearch/guide/current/near-real-time.htmlを持っています#refresh-api –

答えて

1

私はBulk APIの使用があなたを助けることができる、と思うので、代わりに1つのドキュメントを送信する - それをインデックス> - >インデックス - - ずっとに高速でなければなりません>コミット、>コミットは、あなたが1000年のドキュメントを送信してくださいます。バルクAPIは、単一のAPIコールで多くのインデックス/削除操作 を実行することが可能となり

は公式弾性ドキュメントから撮影します。これにより、索引作成速度が大幅に向上します。 Pythonでそれを使用する方法の詳細については

からhttp://elasticsearch-py.readthedocs.io/en/master/helpers.html

+0

ありがとう、その動作完璧、:)私は最後のanwserのサンプルコードで私の質問を変更します。 – ParisNakitaKejser

関連する問題