我已在Elasticsearch中为文档编制索引,如下所示:
{
_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 :(得分: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