elasticsearch简单使用(一)

为什么要使用es

在一张有很多数据的表里进行查询会很慢,严重影响客户的体验,而且得到的搜索结果,不一定会符合用户的需求,在这样的情况下就轮到ElasticSearch排上用场了

下载

安装Elasticsearch之前需要安装配置好JDK,设置好环境变量$JAVA_HOME。不同版本对Java的依赖也有一点点差别,这个自行百度吧

下载ES
访问ES官网
选着自己需要的下载
在这里插入图片描述
在框架里则需要安装拓展
composer下载拓展命令

composer require elasticsearch/elasticsearch

运行测试

CD 刚刚下载的 bin目录下
运行 elasticsearch.bat 文件查看效果
访问图中的 127.0.0.1:9200 得到的
在这里插入图片描述
这样就运行成功了

框架里简单使用

安装拓展
上面已经写了安装拓展的命令这里就不再重复了
这里我用的是thinkphp6安装成功会在vendor目录下有一个elasticsearch

在这里插入图片描述

class Elasticsearch extends Controller
{
    private $client;
    public function __construct()
    {
        $this->client=ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
    }

    //创建索引  (表)
    public function SearchAdd(){
        // 创建索引
        $params = [
            // 生成索引的名称
            'index' => 'users',
            // 类型 body
            'body' => [
                'settings' => [
                    // 分区数
                    'number_of_shards' => 5,
                    // 副本数
                    'number_of_replicas' => 1
                ],
                'mappings' => [
                        // 字段  类似表字段,设置类型
                        'properties' => [
                            //字段
                            'name' => [
                                'type' => 'text',// 数据类型
                                //standard 相当于数据查询是的 = 张三你好,必须找到张三你好
                                //ik_max_word 中文分词  张三你好   张三  你好 张三你好
                                'analyzer' => 'ik_max_word',// 分析器
                                'search_analyzer'=> 'ik_max_word'
                            ],
                            'age' => [
                                'type' => 'integer'
                            ],
                        ]
                ]
            ]
        ];
//         创建索引
        $response = $this->client->indices()->create($params);
        dump($response);
        exit();
    }
    //索引添加数据
    public function AddSearch(){
        $user=new UserModel();
        $arr=$user->get()->toArray();
        foreach ($arr as $k=>$v){
            $params=[
              'index'=>'user',
              'type' => '_doc',
              'id'=>$v['uid'],
              'body'=>[
                  'uid'=>$v['uid'],
                  'uname'=>$v['uname'],
                  'upwd'=>$v['upwd'],
                  'rid'=>$v['rid'],
                  'img'=>$v['img']
              ],
            ];
            $this->client->index($params);
        }
        exit();
    }

    //查询全部
    public function indexAll(){
        $params=[
            'index'=>'user',
            'type'=>'_doc'
        ];
        $arr=$this->client->search($params);
        return $arr;
    }

    //id查询
    public function SearchGet(Request $request){
        $arr=$request->get('id');
        $arr=[1,2,3,4,5,6,7,8,12,13];
        $data=[];
        foreach ($arr as $k=>$v){
            $params=[
                'index'=>'user',
                'type' => '_doc',
                'id'=>$v,
            ];
            $data[]=['rid'=>$v];
            $data[$k]=$this->client->getSource($params);
        }
       return $data;
    }

    //高亮查询
    public function HighligthGet(Request $request){
        $Role=new RoleModel();
        $count=$request->get('count');
        $params=[
            'index'=>'user',
            'type' => '_doc',
            'body'=>[
                'query'=>[
                    'match'=>[
                        'uname'=>$count
                    ]
                ],
                'highlight'=>[
                    'fields'=>[
                        'uname'=>new \stdClass()
                    ]
            ],
            ]
        ];
        $results = $this->client->search($params);
        $arr=[];
        foreach ($results['hits']['hits'] as $k=>$v){
            $arr[]=$v;
        }
        $data=[];
        foreach ($arr as $k=>$v){
            $data[$k]['id']=$v['_id'];
            $data[$k]['uname']=$v['_source']['uname'];
            $data[$k]['upwd']=$v['_source']['upwd'];
            $data[$k]['rid']=$v['_source']['rid'];
            $data[$k]['img']=$v['_source']['img'];
            $data[$k]['highlight']=$v['highlight']['uname'][0];
        }
//        foreach ($data as $k=>$v){
//            $data[$k]['rname']=$Role->where('rid',$v['rid'])->get()->toArray()[0]['rname'];
//        }
        print_r($data);exit();
    }

至于es每一个参代表意思,拥有上面含义暂未理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值