2017-12-20 5 views
0

バルクインデックスを私のdjangoモデルを弾性検索にしようとしています6、私の計画はインデックスを更新するために1日1回cronとして実行することです。 インポート要求バルクインデックスdjangoモデルを弾性検索

data = serialize('json', CapitalSheet.objects.all()) 

data += "\n" 

r = requests.post("http://127.0.0.1:9200/capitalsheet/_bulk", json = data) 

print(r.content) 

私はこのエラーを取得しています: b'{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"The bulk request must be terminated by a newline [\\n]"}],"type":"illegal_argument_exception","reason":"The bulk request must be terminated by a newline [\\n]"},"status":400}'

あなたがより良いものを提案することができる場合、私は喜んでいるだろう。

+0

バルク構文は(少なくとも私には)一種の奇妙です。各オブジェクトを別々の行として送信する必要があります。 –

+0

しかし、あなたはPythonライブラリを使うのが良いでしょう。 –

答えて

0

elasticsearchが提供するpythonライブラリを見ることをお勧めします。一括挿入を簡単に行うことができます。ここでは、ドキュメントへのリンクです:あなたはかかわらず、それを手動で行いたい場合は

https://elasticsearch-py.readthedocs.io/en/master/helpers.html#bulk-helpers

、ESバルクAPIは、実際に挿入したいすべてのレコードのための2つのラインを必要とします。最初の行はどのインデックスと操作の種類を示し、2行目は挿入するレコードです。たとえば、あなたのリクエストボディは、次のようになります

{ "index" : { "_index" : "test", "_type" : "type1" } } 
{ "field1" : "value1" } 
{ "index" : { "_index" : "test", "_type" : "type1" } } 
{ "field1" : "value2" } 

ESのマニュアルはここにもこのことを説明しています https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html