elasticsearch - 在 Elasticsearch 中更新索引文档

标签 elasticsearch full-text-search

我想了解您如何在 Elasticsearch 中更新索引文档。我不明白它是如何工作的? API 所指的 ctx 是做什么的?假设您有一个包含嵌套文档的文档,您需要做什么才能更新它?

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

最佳答案

更新请求从 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 - 在 Elasticsearch 中更新索引文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722197/

相关文章:

elasticsearch - 如何通过对象值字段过滤Elasticsearch

php - MySQL 全文连字符和大括号返回错误(原为 : PDO prepared statement not doing its job?)

mysql - 搜索查询中最匹配的词

ruby - 查找数据库中大量数据的词频

mysql - 搜索文本输入以查找数据库列表中出现的单词

mysql - 在搜索引擎上为每个单词添加分数

elasticsearch - 获取索引上的字段数

谷歌云平台上的Elasticsearch外部访问?

elasticsearch - Elastic Search 6.x不断失败

elasticsearch - Elasticsearch 5.5高亮字段不起作用