【问题标题】:Update information in Elastic Search在 Elastic Search 中更新信息
【发布时间】:2018-11-28 23:03:58
【问题描述】:

我有一个问题,我正在尝试更新 ES 中的一个对象,所以,每次我查询它时,我都会得到所有更新的信息。我有一个这样的对象:

{
  "took": 7,
  "timed_out": false,
  "_shards": {
    "total": 768,
    "successful": 768,
    "failed": 0
  },
  "hits": {
    "total": 456,
    "max_score": 1,
    "hits": [
      {
        "_index": "sometype_1",
        "_type": "sometype",
        "_id": "12312321312312",
        "_score": 1,
        "_source": {
          "readModel": {
            "id": "asdfqwerzcxv",
            "status": "active",
            "hidden": false,
            "message": "hello world",
          },
          "model": {
            "id": "asdfqwerzcxv",
            "content": {
              "objectId": "421421312312",
              "content": {
                 "@type": "text",
                 "text": "hello world"
               }
              ..... //the rest of the object...

我想更新消息(读取模型的一部分),所以我做了这样的事情:

PUT test/readModel.id/ID123
{
    "message" : "hello"
}

但每次我查询以查找 ID123 时,我都会得到相同的信息(更糟糕的是,我制作的 PUT 越多,我返回的对象就越多(具有相同的信息)

知道怎么做吗?

【问题讨论】:

  • 您是否需要更新多个带有readModel.id: asdfqwerzcxv 的文档或只更新一个?下面两种情况都有答案。

标签: elasticsearch


【解决方案1】:

如果您只需要更新一个文档,您可以像这样使用Update API

POST sometype_1/sometype/12312321312312/_update
{
  "doc": {
    "model.message": { ... your JSON object here... }
  }
}

如果多个文档可以有readModel.id: asdfqwerzcxv,并且你想用相同的message更新它们,那么你需要像这样使用Update by query API_

POST sometype_1/_update_by_query
{
  "script": {
    "source": "ctx._source.message = params.message",
    "lang": "painless",
    "params": {
      "message": "hello"
    }
  },
  "query": {
    "match": {
      "readModel.id": "asdfqwerzcxv"
    }
  }
}

【讨论】:

  • 如果我想用 json 值更新模型(不是 readModel)怎么办?比如 "message" : { "value" : "hello", "type" : "text"},这样可以吗?
  • model 是否已经有 message 类型为 text 的字段?还是您正在创建一个新领域?
  • 不,它没有,或者可能是像消息描述这样的新字段,例如如果更容易...
  • 回到我最初的问题:是否有几个带有readModel.id: asdfqwerzcxv 的文档需要更新,还是只需要一个?
  • 谢谢!最后一件事......如果改为更新消息我想要一个像 messageDescription 这样的新字段,我可以在“model.message”上更改它吗?
猜你喜欢
  • 2018-08-01
  • 1970-01-01
  • 2015-02-07
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多