2016-12-29 116 views
0

我使用Elasticsearch 5.1.1,在我的索引中批量插入文檔,我需要在響應中獲取文檔字段之一以及自動生成的_id以更新數據庫。Elasticsearch 5 - 在批量插入時從文檔返回字段

我一直在努力如同下列的請求:

curl -XPOST localhost:9200/_bulk?pretty -d ' 
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type" , "_source_include" : "db_id"} } 
{ "db_id" : "value1" } 
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type" , "_source_include" : "db_id"} } 
{ "db_id" : "value2" } 
' 


curl -XPOST localhost:9200/_bulk?pretty -d ' 
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type", "fields" : ["db_id"]} } 
{ "db_id" : "value1" } 
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type", "fields" : ["db_id"]} } 
{ "db_id" : "value2" } 
' 

curl -XPOST 'localhost:9200/_bulk?pretty&fields=db_id' -d ' 
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type" } } 
{ "db_id" : "value1" } 
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type"} } 
{ "db_id" : "value2" } 
' 

他們中有些人有輕微的變化和組合,但沒有運氣。

不知道這甚至有可能...

+0

當使用批量插入文檔時,你需要應用_index,_type和_Id,如果你不應用_id elasticsearch會爲你生成_id,並且在響應中你會得到生成_id。 Elasticsearch不會生成其他字段 – Lax

+0

感謝您的回答和對不起,也許我沒有解釋得很好,我確實需要ES來生成_id,但我也需要它返回「db_id」字段(是的,那個我索引,來自文檔)以及_id。這樣,我可以執行類似於 UPDATE表設置elastic_id = _id WHERE db_id =:db_id' 也許這不是正確的方法,但是,我認爲查詢返回_ids(從批量插入)到知道db_ids是開銷太多...... 我想要做的就像pgsql的'INSERT INTO表VALUES(?,?,?)RETURNING ID,name'類似的東西 –

+0

如果您生成db_id,爲什麼您需要elasticsearch返回它適合你嗎? – Lax

回答

0

創建對象的數組,每個對象包含DB_ID和Id.before調用批量設置DB_ID,要求散裝後設置id字段與elasticsearch產生_id 。現在當你想更新你的Id和db_id時