update_by_query是elasticsearch通過查詢條件進行文檔更新操作
使用update_by_query要滿足如下條件:
1、根據查詢條件進行文檔更新的API是在Elasticsearch2.3+以上版本加上的
2、在Elasticsearch配置文件elasticsearch.ymf中加入如下配置項
script.inline: on
script.indexed: on
PHP使用update_by_query代碼如下
$params = [
'index' => 'my_index',
'body' => [
'query' => [
'bool' => [
'must' => [
'range' => [
'age' => [
'gt' => '20',
'lt' => '40'
]
]
]
]
],
'script' => [
'inline' => "ctx._source.name=\"青年人\"; ctx._source.age=30"
]
]
];
$client = Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$res = $client->updateByQuery($params);
執行後的響應體例子如下
{
"took" : 639, #從整個操作的開始到結束的毫秒數。
"deleted": 0, #刪除的數目
"batches": 1, #通過查詢刪除的滾動響應數量。
"version_conflicts": 2, #由查詢命令刪除的版本衝突數。
"retries": 0, #查詢刪除的重試次數是響應於完整隊列
"throttled_millis": 0, #請求睡眠符合的毫秒數requests_per_second。
"failures" : [ ] #所有索引失敗的數組。如果這是非空的,那麼請求因爲這些失敗而中止。
}