• 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 的博客

  • 相关阅读:
    js的click事件传递参数方法
    https://en.wikipedia.org/wiki/Log-structured_merge-tree
    窗口标题
    编译器前端 后端
    https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/util/MurmurHash.html
    修改内存数据
    阿里巴巴建设业务中台的方法论 业务中台规范
    入 Go 必读:大型Go工程的项目结构及实战思考 原创 毛剑 QCon 今天
    https://github.com/golang/go/wiki/CommonMistakes
    goroutines inside of goroutines
  • 原文地址:https://www.cnblogs.com/heijinli/p/16261362.html
Copyright © 2020-2023  润新知