当前位置: 首页 > 知识库问答 >
问题:

如何使用Elasticsearch更新API更新文档?

宋耀
2023-03-14

我在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}}'

但还是没有成功。有人能帮我解决这个错误吗?

共有1个答案

羊柏
2023-03-14

基本上是语法不正确导致了无法更新的问题。

错误:

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
 类似资料:
  • 问题内容: 有没有人有使用更新的示例?它已在此处进行了文档记录,但是文档尚不清楚,并且不包含有效的示例。我尝试了以下方法: 我得到 我想使用部分文档进行更新,但是update方法不使用任何名为“ doc”或“ document”的参数。 问题答案: 您快要准备好了,只需要将您的身体放在“ doc”字段中即可。使用elasticsearch-py进行部分更新的正确方法如下:

  • 问题内容: 该代码按预期工作。但是,我不想更新第三个国家作为另一个文档,而是要更新第一个文档。 这样,文档ID 1将有3个国家:印度,中国和巴基斯坦。我想我需要使用doc_as_upsert参数更新API。但是我不确定如何编写JSON。 问题答案: 您可以使用update API 进行脚本更新: 更新 如果要在批量查询中使用它,也可以

  • 问题内容: 我已将代码移植到NEST 2.0和Elasticsearch 2.0 我需要找到一种方法来更新已经存储在ES2中的文档 我正在使用部分对象技术: 如何使用NEST2做同样的事情? 问题答案: 您传递文档ID的方式有些变化。 今天看起来像: 要么 希望能帮助到你。

  • 我必须使用jenkins的api创建/更新一个jenkins作业,因为我的所有作业都使用了其他脚本也使用的参数,并且我试图将脚本集中起来,这样当我在一个地方更改它时,所做的更改就会反映在所有的脚本中。 当前,如果有人更改了脚本,他们也必须手动编辑jenkins作业的参数。 我看到了用于创建作业的远程API的示例,并且能够成功地创建测试作业,但是除了删除并重新创建一个现有作业之外,我如何编辑它(这不

  • 我有一个elasticsearch服务器,我正在使用Jest客户机通过java服务器访问它,我正在寻找每次更新文档多个字段的最佳方法。 到目前为止,我查看了文档,发现有两种方法可以实现: 通过脚本进行部分更新:我认为它不适合多字段更新(因为我不知道修改的字段)。 整个文档更新:通过重新索引整个文档。 删除文档并对更新的版本进行索引是最好的方法吗?

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