ethansmart / es-for-laravel
ElasticSearch Client For Laravel
This package's canonical repository appears to be gone and the package has been frozen as a result.
1.0.0
2018-10-05 03:17 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2019-12-11 04:28:16 UTC
README
ES for Laravel
Usage
EsBuilder 有两种模式
- ES ORM Client (ORM模式):支持Model映射
- 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; } }