1.连接配置
require './elastic/vendor/autoload.php';//引入类
$params['hosts'] = array(
$ip.':'.$port,
)
$this->client = new \Elasticsearch\Client($params);
2.查询
//必须的index和type
$params['index'] = 'access';
$params['type'] = 'log_access';
/*查询条件和字段*/
//确定查找某个字段等于页面传递过来的值
$params['body']['query']['bool']['must'][] = ['match_phrase'=>['ip'=>$ip]];
$res = $this->client->search($params);
//查询时间范围
$time = I('time');//从页面获取输入的时间
$start = strtotime(explode('-',$time)[0]);
$end = strtotime(explode('-', $time)[1]);
$start = date('Y-m-d H:i:s',$start);
$end = date('Y-m-d H:i:s',$end);
$params['body']['query']['bool']['filter']['range']['time'] = ['gte'=>$start,'lte'=>$end];
$res = $this->client->search($params);
3.排序
//按照时间排序
$params['body']['sort']['time']['order'] = 'desc';
$res = $this->client->search($params);
4.聚合
//按照一个字段聚合
$params['body']['aggs']['src_ip']['terms']['field'] = 'src_ip';
//按照多个字段聚合
$params['body']['aggs']['ip_lab']['terms']['script']['inline'] = "doc['ip'].value+'-split-'+ doc['house_id'].value";
$params['body']['aggs']['ip_lab']['terms']['size'] = 1000000;
//聚合的同时对某个字段求和
$params['body']['aggs']['ip_lab']['terms']['script']['inline'] = "doc['ip'].value+'-split-'+ doc['house_id'].value";
$params['body']['aggs']['ip_lab']['terms']['size'] = 1000000;
$params['body']['aggs']['ip_lab']['aggs']['view']['sum'] = ['field'=>'visitscount'];
//聚合求某个值的最大值和最小值等一些情况
$params['body']['aggs']['first_time']['stats'] = ['field'=>'first_time'];
此文章系本人原创,转载请标明出处。