更新请求从Elasticsearch检索源,对其进行修改并将其索引回Elasticsearch。如果您已经具有使用更新的文档副本,则毫无意义。仅索引新版本通常会更快。但是,如果您没有随时可用的文档,但知道要对文档进行哪些更改,则使用更新可能会更有效。
例如,如果我没有汽车文档的副本,但是我想添加一个新的创建者,则可以执行以下操作:
curl -XDELETE localhost:9200/testcurl -XPUT localhost:9200/test -d '{ "settings": { "index.number_of_shards": 1, "index.number_of_replicas": 0 }, "mappings": { "car": { "properties": { "creators" : { "type": "nested", "properties": { "name": {"type":"string"} } } } } }}'curl -XPOST localhost:9200/test/car/1 -d '{ "creators": [{ "name": "Steve" }]}'echocurl -XPOST localhost:9200/test/car/1/_update -d '{ "script" : "ctx._source.creators += new_creator", "params" : { "new_creator" : {"name": "John"} }}'echocurl "localhost:9200/test/car/1?pretty=true"echo在更新脚本中,
ctx有一个特殊变量,允许您访问要更新的对象的源。该
ctx._source是源的可写版本。您可以在脚本中修改此文档,并且修改后的源将作为文档的新版本保留。



