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 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 就可以了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Ethan Smart & AI Algorithm
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!