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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容