ElasticSearch从入门到精通(持续更新....)—_update_by_query

462 阅读1分钟

放开手,使开胆,不复瞻前顾后。

在很多的情况下,我们我们想更新我们的文档:

添加一个新的field或者是一个字段变成一个multi-field

用一个值更新所有的文档,或者更新复合查询条件的所有文档

在今天的文章中,我们来讲一下_update_by_query的这几个用法。

增加一个新的字段

可以通过script的方法来为我们的twitter增加一个新的字段,比如:

POST book_will/_update_by_query
{
  "script": {
    "source": "ctx._source['contact'] = "139111111111""
  }
}

修改已有的字段

假如我们想对所有在北京的文档里的uid都加1,那么我么有通过如下的方法:

POST book_will/_update_by_query
{
  "query": {
    "match": {
      "city.keyword": "北京"
    }
  },
  "script": {
    "source": "ctx._source['uid'] += params['one']",
    "params": {
      "one": 1
    }
  }
}

加入我们想把状态UP_SHELF数据改为DOWN_SHELF:

POST book_will/_update_by_query
{
    "query": {
        "match": {
            "status": "UP_SHELF"
        }
    },
    "script": {
        "inline": "ctx._source['status'] = 'DOWN_SHELF'"
    }
}

更新多个字段用分号隔离开:

主要看一下下面的script,多个字段就用分号隔开: ctx._source[字段名] = “值”;ctx._source[字段名] = “值”;