【问题标题】:How to update a document using the Elasticsearch Update API?如何使用 Elasticsearch 更新 API 更新文档?
【发布时间】:2013-07-19 01:12:30
【问题描述】:

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

它仍然没有工作。谁能帮我解决这个错误?

【问题讨论】:

  • 您确定要更新的文档存在吗?
  • 肯定的;它必须存在。不知何故,文档并没有真正显示应该如何清晰索引的语法。或者我可能误读了文档。
  • 试试:curl -XGET 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw',输出是什么? .另外,你用的是ES 0.19+,对吧?
  • 我正在使用 _ttl,因此我的文档不会超过 30 分钟。我查询了一个现有的 id,它给出了: {"_index":"prototype_2013.01.03","_type":"chow-clfg","_id":"XQZc6tooQwG8GZhz9e-MaQ","exists":false} 但是当我进行搜索查询,我能够找到该文档。为什么会这样?
  • 索引时您是否使用routing?如果是,您需要在使用-XGET 时提供此路由值。

标签: elasticsearch


【解决方案1】:

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

错误:

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

【讨论】:

  • 如何使用 php 来实现?
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
相关资源
最近更新 更多