2013-01-02 73 views
3

我在Elasticsearch索引的文件如下:如何使用Elasticsearch Update API更新文檔?

{ 
_parent: chow-demo 
_index: prototype_2013.01.02 
_type: chow-clfg 
_id: Nx4JcvyxTPujkyy0Jq5BNw 
_score: 11.600378 
_source: { 
    chow-clfg: { 
    @type: chow-clfg 
    clfg: Cg5iV00z4woYAAAARQ0 
    @timestamp: 2013-01-02T06:26:00.000Z 
    count: 1 
    } 
} 
} 

我試圖通過以下命令來更新計數字段:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update' -d '{"script":"ctx._source.chow-clfg.count+=num","params":{"num":1}}' 

但是我收到以下錯誤,而不是:

{"error":"RemoteTransportException[[Vesta][inet[/10.15.78.249:9300]][update]]; nested: DocumentMissingException[[prototype_2013.01.02][0] [chow-clfg][Nx4JcvyxTPujkyy0Jq5BNw]: document missing]; ","status":404} 

我究竟做了什麼?我在http://www.elasticsearch.org/guide/reference/api/update.html以下的文件,但它不起作用。

而且,我包括父字段:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update' -d '{"parent":"chow-demo","script":"ctx._source.chow-clfg.count+=num","params":{"num":1}}' 

它仍然沒有奏效。任何人都可以幫助我解決這個錯誤?

+0

你確定您嘗試更新的文檔是否存在? –

+0

當然;它必須存在。不知怎的,文檔並沒有真正顯示它應該如何清晰地編入索引的語法。否則我可能會誤讀文檔。 –

+0

嘗試:'curl -XGET'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw'',輸出是什麼? 。另外,你使用'ES 0.19 +',對吧? –

回答

3

基本上它是不正確的語法導致不能更新的問題。

錯誤:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update' \ 
    -d '{"script":"ctx._source.chow-clfg.count+=num","params":{"num":1}}' 

正確的語法:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update?parent=chow-demo' 
    -d '{"script":"ctx._source[\"chow-demo\"].count+=num","params":{"num":1}}' 

父映射應包括,在其正確的語法類型名字聯繫在一起:

ctx._source[\"chow-demo\"].count+=num 
+0

如何使用php實現這個功能? – Vagabond

相關問題