Elasticsearch之delete_by_query和update_by_query

本文介绍了Elasticsearch中的delete_by_query和update_by_query方法。delete_by_query用于按条件删除记录,其任务模式允许异步执行并处理版本冲突。update_by_query则支持按条件更新文档,同样支持异步任务,允许在更新操作中指定详细更新语句。

delete_by_query

delete_by_query方法会删除符合条件的记录,示例如下:

POST twitter/(doc_type, 5.x)/_delete_by_query
{
  "query": { 
    "match": {
      "message": "some message"
    }
  }
}

查询语句跟search api是一样的,很方便。
然后就会得到类似下面的结果:

{
  "took" : 147,
  "timed_out": false,
  "deleted": 119,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1.0,
  "throttled_until_millis": 0,
  "total": 119,
  "failures" : [ ]
}
  • version_conflicts表示是否有数据版本冲突,因为开始要删除时,delete_by_query会得到索引快照并且使用内部版本号来找到要删除哪些文档。如果获取到快照与执行删除过程的这段时间内,有文档发生变化,那么版本就会冲突。另外版本冲突后可以设置conflicts=proceed跳过冲突。
  • retries表示重试次数,因为本操作是按批次处理的,当一个批次操作时可能会失败,这时候es会发起重试。
  • requests_per_second表示在通过查询删除期间有效执行的每秒请求数。
  • throttled_millis表示请求睡眠以符合requests_per_second的毫秒数。
  • throttled_until_millis:在delete_by_query响应中,此字段应始终等于零。 它只在使用Task API时有意义,它指示再次执行限制请求以符合requests_per_second。
任务模式

在delete_by_query中如果加上参数wait_for_completion=false就会开启任务模式,响应会直接返回一个task id,不用等待操作执行完毕。

可以通过api: GET _tasks?detailed=true&actions=*/delete/byquery查看正在执行的异步任务,

也可以直接通过GET /_tasks/{task id}直接查看异步任务的信息。
如果需要取消这个异步任务,则需要请求POST _tasks/{task id}/_cancel

update_by_query

update_by_query的语法基本上和delete_by_query类似,但是因为增加了更新操作,所以语句内会增加相应的更新语句。
例如:

POST twitter/_update_by_query
{
    "script" : {
        "source": "ctx._source.counter += params.count",
        "lang": "painless",
        "params" : {
            "count" : 4
        }
    },
    "query": {
     "term": {
      "user": "kimchy"
    }
  }
}

或者:

POST twitter/_update_by_query
{
  "script": {
    "source": "ctx._source.likes++",
    "lang": "painless"
  },
  "query": {
    "term": {
      "user": "kimchy"
    }
  }
}

其他语法和delete_by_query一样,不再赘述,另外也提供异步任务模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值