美文网首页
es-for-Laravel: Composer 包安装, La

es-for-Laravel: Composer 包安装, La

作者: Ethansmart | 来源:发表于2018-10-06 19:50 被阅读0次
    
    composer 安装:composer require ethansmart/es-for-laravel
    
    github 地址:https://github.com/roancsu/es-for-laravel
    
    

    ES for Laravel

    Usage

    EsBuilder 有两种模式

    1. ES ORM Client (ORM模式):支持Model映射

    2. ES Client (非ORM模式):支持原生ES

    使用 ES ORM Client

    首先创建ORM Model

    
    use Ethansmart\EsBuilder\Model\EsModel;
    
    /**
    
    * Class AtPerson
    
    * $host ES IP或URL地址
    
    * $port ES 端口
    
    * $index ES 索引名称
    
    * $type ES 索引 type名称
    
    * @package Ethan\EsBuilder\Model
    
    */
    
    class AtPerson extends EsModel
    
    {
    
        protected $host = "127.0.0.1";
    
        protected $port = "32800";
    
        protected $index = "accounts";
    
        protected $type = "person";
    
    }
    
    

    然后使用Model对ES进行CURD操作

    搜索

    
    try {
    
        $result = AtPerson::build()
    
                  ->select("user")
    
                  ->where("user",'==',"chengluo")
    
                  ->where("title,desc","like","AI")
    
                  ->where("create_time","<","2018-10-05")
    
                  ->get();
    
    } catch (\Exception $e) {
    
        return ['code'=>-1, 'msg'=>$e->getMessage()];
    
    }
    
    return $result;
    
    

    新增

    
    try {
    
        $id = 5;
    
        $data = [
    
          'id'=>$id,
    
          'params'=>[
    
                'user'=>'Ethan Cheng',
    
                'title'=>'AI '.str_random(8),
    
                'desc'=>'AI '.str_random(12)
    
          ]
    
        ];
    
        $result = AtPerson::build()->create($data);
    
    } catch (\Exception $e) {
    
        return ['code'=>-1, 'msg'=>$e->getMessage()];
    
    }
    
    return $result;
    
    

    更新

    
    try {
    
        $id = 5;
    
        $data = [
    
            'id'=>$id,
    
            'params'=>[
    
                'user'=>'Ethan Cheng',
    
                'title'=>'AI '.str_random(8),
    
                'desc'=>'AI '.str_random(12)
    
            ]
    
        ];
    
        $result = AtPerson::build()->update($data);
    
    } catch (\Exception $e) {
    
        return ['code'=>-1, 'msg'=>$e->getMessage()];
    
    }
    
    return $result;
    
    

    删除

    
    try {
    
        $id = 5;
    
        $result = AtPerson::build()->delete($id);
    
    } catch (\Exception $e) {
    
        throw $e;
    
    }
    
    
    
    return $result;
    
    

    使用 ES Client

    首先构建 Client

    
    private $client ;
    
    public function __construct()
    
    {
    
        $host = "127.0.0.1";
    
        $port = "32800";
    
        $this->client = EsClientBuilder::create()
    
            ->setHosts($host)
    
            ->setPort($port)
    
            ->build();
    
    }
    
    

    调用Client中的方法对ES进行CURD操作

    
    $data = [
    
        'index'=>'accounts',
    
        'type'=>'person',
    
        'body'=>[
    
              "query"=>[
    
                  "bool"=>[
    
                      "must"=>[
    
                            "match"=>[
    
                                  "user"=>"ethan"
    
                            ]
    
                      ]
    
                  ]
    
              ]
    
        ],
    
    ];
    
    try {
    
        $result = $this->client->search($data);
    
    } catch (\Exception $e) {
    
        return ['code'=>-1, 'msg'=>$e->getMessage()];
    
    }
    
    return $result;
    
    

    其他方法类似

    创建Laravel Job 同步数据到 ES

    
    use Ethansmart\EsBuilder\Builder\EsClientBuilder;
    
    class EsService
    
    {
    
        private $client ;
    
        public function __construct()
    
        {
    
            $host = "127.0.0.1";
    
            $port = "32800";
    
            $this->client = EsClientBuilder::create()
    
                ->setHosts($host)
    
                ->setPort($port)
    
                ->build();
    
        }
    
        public function create($id)
    
        {
    
            $data = [
    
                'index'=>'accounts',
    
                'type'=>'person',
    
                'id'=>$id,
    
                'body'=>[
    
                    'user'=>str_random(6),
    
                    'title'=>str_random(12),
    
                    'desc'=>str_random(16),
    
                ]
    
            ];
    
            try {
    
                $result =  $this->client->create($data);
    
            } catch (\Exception $e) {
    
                return ['code'=>-1, 'msg'=>$e->getMessage()];
    
            }
    
            return $result;
    
        }
    
    }
    
    

    Q:

    在使用 composer 安装过程中会出现 如下异常:

    [InvalidArgumentException]

    Could not find a version of package ethansmart/es-for-laravel matching your minimum-stability (stable). Require it with an explicit version constraint allowing its desired stability.

    解决方法:

    在项目composer.json文件中加入:

    
    "repositories": [
    
            {
    
                "packagist.org": false
    
            },
    
            {
    
                "type": "composer",
    
                "url": "https://packagist.org"
    
            }
    
        ],
    
    

    将国内的composer镜像换成 packagist.org 就可以了。

    相关文章

      网友评论

          本文标题:es-for-Laravel: Composer 包安装, La

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