在Elasticsearch中更新索引文档

我正在尝试了解如何在Elasticsearch中更新索引文档。我不明白它是如何工作的?什么是ctx该API指的是在做什么?假设您有一个带有嵌套文档的文档,您需要做什么来更新它?

删除文档然后索引“已更新”版本与普通更新之间有什么区别?

回答:

更新请求从Elasticsearch检索源,对其进行修改并将其索引回Elasticsearch。如果您已经具有使用更新的文档副本,则毫无意义。仅索引新版本通常会更快。但是,如果您没有随时可用的文档,但知道要对文档进行哪些更改,则使用更新可能会更有效。

例如,如果我没有汽车文档的副本,但是我想添加一个新的创建者,则可以执行以下操作:

curl -XDELETE localhost:9200/test

curl -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"

}]

}

'

echo

curl -XPOST localhost:9200/test/car/1/_update -d '{

"script" : "ctx._source.creators += new_creator",

"params" : {

"new_creator" : {"name": "John"}

}

}'

echo

curl "localhost:9200/test/car/1?pretty=true"

echo

在更新脚本中,ctx有一个特殊变量,允许您访问要更新的对象的源。该ctx._source是源的可写版本。您可以在脚本中修改此文档,并且修改后的源将作为文档的新版本保留。

以上是 在Elasticsearch中更新索引文档 的全部内容, 来源链接: utcz.com/qa/403152.html

回到顶部