php elasticsearch查询封装

es收集的数据虽然可以在kibina里展示,但是要局限也比较大,不能用kibina展示的只能自己动手写web展示了,利用php读取elasticsearch数据,经过处理成echarts 图表数据通过web界面展示。

贴代码吧:es查询拼装类

<?php
use Elasticsearch\ClientBuilder;
class es {
    private $es;
    private static $instance;
    private function __construct($es_config)
    {
        $this->es = ClientBuilder::create()
            ->setHosts($es_config)
            ->build();
    }
    static public function getInstance($es_config){
        if (!self::$instance instanceof self) {
            self::$instance = new self($es_config);
        }
        return self::$instance;
    }
    //获取一个文档
    public function getDoc($query){
        return $this->es->get($query);
    }
    //获取查询结果
    public function search($query){
        return $this->es->search($query);
    }

    //es查询拼装
    public function queryBuild($params){
        if($params['start'] && $params['end']){
            $arr['bool']['must'][0]['range']['date'] = array('gte'=>$params['start'],'lt'=>$params['end'],'format'=>'epoch_millis');
        }
        if($params['term']){
            foreach ($params['term'] as $v){
                $arr['bool']['must'][] = array('term'=>array($v[0]=>$v[1]));
            }
        }
        if($params['not_term']){
            foreach ($params['not_term'] as $v){
                $arr['bool']['must_not'][] = array('term'=>array($v[0]=>$v[1]));
            }
        }
        if($params['match']){
            foreach ($params['match'] as $v){
                $arr['bool']['must'][] = array('match'=>array($v[0]=>$v[1]));
            }
        }
        if($params['not_match']){
            foreach ($params['not_match'] as $v){
                $arr['bool']['must_not'][] = array('match'=>array($v[0]=>$v[1]));
            }
        }
        if($params['exists']){
            foreach ($params['exists'] as $v){
                $arr['bool']['must'][] = array('exists'=>array('field'=>$v));
            }
        }
        if($params['not_exists']){
            foreach ($params['exists'] as $v){
                $arr['bool']['must_not'][] = array('exists'=>array('field'=>$v));
            }
        }
        if($params['should_match']){
            foreach ($params['should_match'] as $v){
                $arr['bool']['should'][] = array('match'=>array($v[0]=>$v[1]));
            }
        }
        if($params['should_term']){
            foreach ($params['should_term'] as $v){
                $arr['bool']['should'][] = array('term'=>array($v[0]=>$v[1]));
            }
        }
        if($arr){
            return json_encode($arr);
        }
    }
    public function del($indexName){
        $param = ['index' => $indexName];
        try{
            $this->es->indices()->delete($param);
        }catch (Exception $e){
            //var_dump($e);
        }
    }

}

 使用方式:php获取http参数,拼成数组传递给queryBuild生成es的query查询体

$es_config = array(
    array('host' => '10.27.106.1','port' => '9200','user' => 'elastic','pass' => 'pass'),
    array('host' => '10.27.106.2','port' => '9200','user' => 'elastic','pass' => 'pass'),
    )
$es = es::getInstance($es_config);
$queryParam = $es->queryBuild(['start'=>$param['t1'],'end'=>$param['t2'],'exists'=>['play']]);
        $query = [
            'index' => 'index_name',
            'type' => 'type_name',
            'body' => '
                {"size": 0,
                  "query":'.$queryParam.'
                }'
        ];
$res = $es->search($query);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值