zoukankan      html  css  js  c++  java
  • es-for-Laravel: Composer 包安装, Laravel 最简单的方式操作 Elasticsearch

    
    
    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 EthansmartEsBuilderModelEsModel;
    /**
    
    * Class AtPerson
    * $host ES IP或URL地址
    * $port ES 端口
    * $index ES 索引名称
    * $type ES 索引 type名称
    * @package EthanEsBuilderModel
    */
    
    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 EthansmartEsBuilderBuilderEsClientBuilder;
    
    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 就可以了。

    原文地址:https://segmentfault.com/a/1190000016600807

  • 相关阅读:
    js检测对象中是否存在某个属性
    ES6 笔记
    DataSet 用法
    CommandBehavior.CloseConnection有何作用
    SqlDataReader
    Listview.Finditem()函数用法
    Instr()函数用法
    StringBuilder与StringBuffer的区别
    [DllImport("kernel32.dll")]使用
    extern用法
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9965118.html
Copyright © 2011-2022 走看看