es官方提供的php接口是没法直接调用_update_by_query接口的,但是既然es的访问是基于http协议的,那么我们完全可以使用模拟http请求的方式来调用官方的接口。抛砖引玉,简单写了一个示例类供大家参考。
<?php
class esapi{
//地址
private $server;
//索引
private $index;
public function __construct()
{
$this->server = 'http://192.168.6.110:9200';
$this->index = 'myproject';
}
/**
* 执行请求
* @param [string] $path 调用的命令
* @param array $http http请求参数
* @return [string] json格式的结果
*/
public function call($path,$http = array())
{
$url = $this->server.'/'.$this->index.'/'.$path;
$context = stream_context_create(array('http' => $http));
$content = file_get_contents($url,NULL,$context);
return $content;
}
/**
* 调用_update_by_query方法
* @return [string] 执行结果
*/
public function my_update_by_query()
{
$param = array(
"query" => array(
"term" => array(
"user" => "kimchy"
)
),
"script" => array(
"inline" => "ctx._source.counter += count",
"params" => array(
"count" => 4
)
)
);
//请求参数
$http = array(
"method" => "POST",
"content" => json_encode($param)
);
//请求方法
$path = "_update_by_query";
return $this->call($path,$http);
}
}