• laravel8 elasticsearch 配置搭建使用


    laravel 8框架  扩展elasticsearch 

    首先 elasticsearch 的版本号 需要和 扩展的版本号对应

    composer require elasticsearch/elasticsearch

    然后是配置到common 调用文件

    <?php
    namespace App\Es;
    
    use Elasticsearch\ClientBuilder;
    
    class MyEs
    {
        //ES客户端链接
        private $client;
    
        /**
         * 构造函数
         * MyElasticsearch constructor.
         */
        public function __construct()
        {
              // 带有账号、密码的客服端信息
              $hosts = [
                  [
                      'host' => '127.0.0.1',      // 域名
                      'port' => '9200',           // 端口
                      'scheme' => 'http',         // 协议
                      'user' => 'elastic',        // 账号
                      'pass' => '123456'         // 密码
                  ]
              ];

              $this->client = ClientBuilder::create()->setHosts($hosts)->build();
        }
    
        /**
         * 判断索引是否存在
         * @param string $index_name
         * @return bool|mixed|string
         */
        public function exists_index($index_name = 'test_ik')
        {
            $params = [
                'index' => $index_name
            ];
            try {
                return $this->client->indices()->exists($params);
            } catch (\Elasticsearch\Common\Exceptions\BadRequest400Exception $e) {
                $msg = $e->getMessage();
                $msg = json_decode($msg,true);
                return $msg;
            }
        }
    
        /**
         * 创建索引
         * @param string $index_name
         * @return array|mixed|string
         */
        public function create_index($index_name = 'test_ik') { // 只能创建一次
            $params = [
                'index' => $index_name,
                'body' => [
                    'settings' => [
                        'number_of_shards' => 5,
                        'number_of_replicas' => 1
                    ]
                ]
            ];
            try {
                return $this->client->indices()->create($params);
            } catch (\Elasticsearch\Common\Exceptions\BadRequest400Exception $e) {
                $msg = $e->getMessage();
                $msg = json_decode($msg,true);
                return $msg;
            }
        }
    
        /**
         * 删除索引
         * @param string $index_name
         * @return array
         */
        public function delete_index($index_name = 'test_ik') {
            $params = ['index' => $index_name];
            $response = $this->client->indices()->delete($params);
            return $response;
        }
    
        /**
         * 添加文档
         * @param $id
         * @param $doc ['id'=>100, 'title'=>'phone']
         * @param string $index_name
         * @param string $type_name
         * @return array
         */
        public function add_doc($id,$doc,$index_name = 'test_ik',$type_name = 'goods') {
            $params = [
                'index' => $index_name,
                'type' => $type_name,
                'id' => $id,
                'body' => $doc
            ];
            $response = $this->client->index($params);
            return $response;
        }
    
        /**
         * 判断文档存在
         * @param int $id
         * @param string $index_name
         * @param string $type_name
         * @return array|bool
         */
        public function exists_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods') {
            $params = [
                'index' => $index_name,
                'type' => $type_name,
                'id' => $id
            ];
            $response = $this->client->exists($params);
            return $response;
        }
    
        /**
         * 获取文档
         * @param int $id
         * @param string $index_name
         * @param string $type_name
         * @return array
         */
        public function get_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods') {
            $params = [
                'index' => $index_name,
                'type' => $type_name,
                'id' => $id
            ];
            $response = $this->client->get($params);
            return $response;
        }
    
        /**
         * 更新文档
         * @param int $id
         * @param string $index_name
         * @param string $type_name
         * @param array $body ['doc' => ['title' => '苹果手机iPhoneX']]
         * @return array
         */
        public function update_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods', $body=[]) {
            // 可以灵活添加新字段,最好不要乱添加
            $params = [
                'index' => $index_name,
                'type' => $type_name,
                'id' => $id,
                'body' => $body
            ];
            $response = $this->client->update($params);
            return $response;
        }
    
        /**
         * 删除文档
         * @param int $id
         * @param string $index_name
         * @param string $type_name
         * @return array
         */
        public function delete_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods') {
            $params = [
                'index' => $index_name,
                'type' => $type_name,
                'id' => $id
            ];
            $response = $this->client->delete($params);
            return $response;
        }
    
        /**
         * 搜索文档 (分页,排序,权重,过滤)
         * @param string $index_name
         * @param string $type_name
         * @param array $body
         * $body = [
                    'query' => [
                        'match' => [
                            'fang_name' => [
                                'query' => $fangName
                            ]
                        ]
                    ],
                    'highlight'=>[
                        'fields'=>[
                            'fang_name'=>[
                                'pre_tags'=>[
                                    '<span style="color: red">'
                                ],
                                'post_tags'=>[
                                    '</span>'
                                ]
                            ]
                        ]
                    ]
                ];
         * @return array
         */
        public function search_doc($index_name = "test_ik",$type_name = "goods",$body=[]) {
            $params = [
                'index' => $index_name,
                'type' => $type_name,
                'body' => $body
            ];
            $results = $this->client->search($params);
            return $results;
        }
    
    }

    在 其他文件中调用

    use App\Service\Common\ElasticSearchService;
    
        public function elastic(){
            $keywords = $this->request->get('keywords');
    
            $body =  [
                'size'   => 20,
                'from'   => 0,
                'query' => [
                    'match' => [
                        'title' => '衣服'
                    ]
                ],
                'sort' => ['_score'=>['order'=>'desc']],
            ];
    
            $res = resolve(ElasticSearchService::class)->search_doc('fulan','goods', $body);
    
            return $res;
        }

    此处 感谢 https://learnku.com/articles/66177 的博客

  • 相关阅读:
    Linux 字典数组应用
    Linux shell 字符串切割 内置方法
    【Swing/文本组件】定义自动换行的文本域
    【C++语法基础】实验1
    【Swing程序设计/常用面板】
    【标签组件与图标 3.3】
    【2018.2.26算法总结#分治】
    数据结构#课表排序及查询
    数据结构#前序遍历建立二叉树 输出中序遍历
    OJ#1002 又是a+b
  • 原文地址:https://www.cnblogs.com/heijinli/p/16261362.html
Copyright © 2020-2023  润新知