当前位置: 首页 > 面试题库 >

在Elasticsearch中更新索引文档

谷梁昊空
2023-03-14
问题内容

我正在尝试了解如何在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中的默认映射。但是所有的文档都指出我们必须为更新映射提供类型。问题是我有很多索引类型,它们是动态创建的,就像新类型的文档出现时一样。所以最好的处理方法是默认映射类型。因为我不必为每个类型定义映射。但现在我无法更新我的索引默认映射。如果可能的话,请告诉我?

  • 我在hibernate search 6中使用elasticsearch时遇到了问题。让我们假设我们有这样的设置: } } 当我第一次持久化EntityA(即被索引的实体)时,EntityB作为EntityA的子实体持久化在elasticsearch索引中。这是可以的。当我直接编辑EntityB并对其进行更改时,问题出现了,这种更改没有传播到elasticsearch索引。我错过了什么吗? 更新1

  • 问题内容: 我需要更改索引中的分片数量。索引很大,为了达到测试目的,我可能不得不将配置更改10-15次才能满意。是否有开箱即用的工具提供这种功能?或最简单的方法是做到这一点? 问题答案: 无论是Perl的和Ruby客户直接支持重建索引。 在Perl中,您可以执行以下操作: 在Clinton Gormley 的帖子中查找更多信息。 在Ruby中,您可以执行以下操作: 在相关的 Tyre 提交中找到更

  • 问题内容: 有没有一种方法可以从ElasticSearch中检索有关特定索引的最新更新时间的信息?我的目标是能够知道什么时候是最后一次在索引中插入/更新/删除任何文档。如果无法做到这一点,是否可以在索引修改请求中添加一些内容,以便稍后提供此信息? 问题答案: 您可以从_timestamp获取修改时间 为了更轻松地返回时间戳,您可以设置Elasticsearch来存储它: 如果插入文档然后对其进行查

  • 我对弹性搜索一无所知。所以,如果这是一个愚蠢的问题,请原谅我,我的问题可能已经在其他地方得到了回答,但我找不到。我想使用弹性搜索作为我的网络中PDF和docx的搜索引擎。我使用fscrawler将PDF文件吸收到弹性搜索中。因为我要摄取的文档是几种语言的,所以我想使用n-graming进行词干分析。为此,我想像这样更新我的映射 现在我收到了这个错误信息 {“error”:{“root_cause”

  • 问题内容: 我正在尝试更新现有的索引文档。我已经索引了标签,标题和所有者字段。现在,当用户更改标题时,我需要在索引中查找并更新文档。 我应该更新和替换整个文档还是仅替换标题字段? 就是行不通。上面的代码生成语法错误。有谁知道使用ElasticSearch的C#NEST客户端执行此操作的正确方法? 问题答案: 我已使用以下方法通过NEST成功更新了Elasticsearch索引中的现有项目。请注意,