美文网首页
在Lumen中使用Elasticsearch

在Lumen中使用Elasticsearch

作者: 腿长袖子短 | 来源:发表于2021-01-12 16:21 被阅读0次

    1. 安装第三方包

    "require": {
            "php": ">=7.1.3",
            "fzaninotto/faker": "^1.8",
            "illuminate/redis": "v5.7.*",
            "laravel/lumen-framework": "5.7.*",
            "laravel/tinker": "^1.0",
            "predis/predis": "^1.1",
            "vlucas/phpdotenv": "~2.2",
            "fadion/bouncy": "dev-l5"
        },
    
    • 运行 composer update "fadion/bouncy"下载安装依赖

    2. 在项目中的配置

    • 在项目/bootstrap/app.php文件中注册

    $app->register(Fadion\Bouncy\BouncyServiceProvider::class);

    • 注意\App\Providers\AppServiceProvider必须在\Fadion\Bouncy\BouncyServiceProvider之前被注册。

        $app->register(App\Providers\AppServiceProvider::class);
        $app->register(Fadion\Bouncy\BouncyServiceProvider::class);
      
      
    • 在项目根目录下创建config目录

    • /vendor/fadion/bouncy/src/config目录下的config.php文件改名为bouncy.php

    • bouncy.php(改名后)和elasticsearch.hpp这两个文件copy到在根目录下创建好的config目录下

    • 打开/config/elasticsearch.php文件,编辑文件中的hosts配置项
      注意:如果你的elasticsearch服务配置有账号密码,而且一般都会有,这种情况下elasticsearch的hosts配置非常特殊,必须使用如下格式
      用户名:密码@服务器地址:端口号 这种格式形式
      http://user:password@URL:port

    'hosts' => [
            //http://user:password@URL:port
            'http://account:password@192.168.2.59:9200'
        ]
    
    • 打开/vendor/fadion/bouncy/src/Fadion/Bouncy/BouncyServiceProvider.php文件

    添加加载配置文件路径函数:

    public function config_path()
        {
            return app()->basePath('config');
        }
    
    • 将上述文件中boot方法中的$this->publishes中调用方法改为使用上述创建的方法:
    public function boot()
        {
            $this->publishes(array(
                $this->config_path('bouncy.php'),
                $this->config_path('elasticsearch.php')
            ));
        }
    
    • \app\Providers\AppServiceProvider.php文件中添加如下方法:
      添加完成后需要在该文件的register方法中调用
    public function register()
        {
            $this->loadConfigFile();
        }
        
        protected function loadConfigFile(){
            $this->app->configure('elasticsearch');
        }
    

    3. 项目中使用

    • 在将要进行索引搜索的 Model 文件里,添加 BouncyTrait 的使用

    • 添加指定函数 documentFields ,设定要搜索出来的字段。添加BouncyTrait的使用:

    namespace App\Model;
    use Fadion\Bouncy\BouncyTrait;
    use Illuminate\Database\Eloquent\Model;
    
    class Goods extends Model
    {
        //添加es的插件使用
        use BouncyTrait;
      
        //定义es的index
        protected $indexName = 'shop_server_index';
        //定义es的type
        protected $typeName = 'shop_server_type';
    
        /**
         * 与模型关联的表名
         *
         * @var string
         */
        protected $table = 'ss_goods';
    
        /**
         * 表的主键名称
         *
         * @var integer
         */
        protected $primaryKey = 'goods_id';
    
        /**
         * 指示模型是否自动维护时间戳
         *
         * @var bool
         */
        public $timestamps = false;
      
        //定义es需要搜索出来的字段
        public function documentFields()
        {
            return [
                'goods_id'=>$this->goods_id,
                'goods_name'=>$this->goods_name,
                'cate_id'=>$this->cate_id,
                'cate_name'=>$this->cate_name,
                'goods_price'=>$this->goods_price,
                'submit_time'=>$this->submit_time
            ];
        }
    }
    
    • 在项目controller中编写测试方法,进行实际测试
    public function es()
        {
            $r = $this->goods::find(1)->index();
            return response($r);
        }
    
    • 通过接口调用请求:
    image-20200407163110937.png

    4. 总结

    • 结论:配置成功,应用成功

    • elasticsearchlumen框架在项目应用层面的结合完毕

    • 后续的研究方向是更多的关于elasticsearch本身的东西,与lumen框架关系不大了

    • 接下来,重点研究 elasticsearch官方文档

    相关文章

      网友评论

          本文标题:在Lumen中使用Elasticsearch

          本文链接:https://www.haomeiwen.com/subject/gokeaktx.html