php好用的elasticsearch依赖包——php-elasticsearch-orm

为什么推荐

前段时间,由于项目对elasticsearch的使用占比越来越大,写elasticsearch的原生查询感觉太麻烦了,因此有个想法,尝试使用orm的方式,封装一个elasticsearch,经过一段时间的使用,觉得还ok,基本都够用,就把它打包成composer包上传,自己经过尝试,可以适用原生php,也可以适用于laravel、hyperf等主流框架(其他理论上应该都可以),所以就大概介绍一下,更多详细用法,可以自己体验,做一下简单的介绍。

介绍

支持php版本

需要注意的是,依赖包支持的php必须在PHP7.0以上。

引入

有兴趣可以查看源码 php-elasticsearch-orm

composer require vae/php-elasticsearch-orm

接入方式

  1. PHP
    $config = require "elasticsearch.php";
    //instance
    $builder = Factory::builder($config);
  1. Laravel框架
    在配置文件config/app.php注册服务提供者
'providers' => [
        Vae\PhpElasticsearchOrm\Laravel\ElasticsearchOrm\OrmProvider::class,
    ] 

实例化使用

$builder = app(\Vae\PhpElasticsearchOrm\Builder::class);
  1. Hyperf框架
    创建OrmElasticsearchClientFactory.php
use \Vae\PhpElasticsearchOrm\Builder;
use \Vae\PhpElasticsearchOrm\Query;
use \Vae\PhpElasticsearchOrm\Grammar;
class OrmElasticsearchClientFactory{
    public static function builder()
    {
        // 如果在协程环境下创建,则会自动使用协程版的 Handler,非协程环境下无改变
        $hyperfBuilder = ApplicationContext::getContainer()->get(ClientBuilderFactory::class)->create();
        $client = $hyperfBuilder->setHosts(['http://127.0.0.1:9200'])->build();
        return new Builder(new Query(new Grammar(), $client));
    }
}
  1. 其他(根据框架调整)

使用方法

  1. 创建
$builder->index('index')->create(['key' => 'value']);
//return collection
$builder->index('index')->createCollection(['key' => 'value']);
  1. 批量创建
$builder->index('index')->batchCreate(
        [
            'key1' => 'v1',
            'key2' => 'v2',
        ],
        [
            'key3' => 'v3',
            'key4' => 'v4',
        ]       
    );
  1. 更新
    $builder->index('index')->update(['key' => 'value']);
    $builder->index('index')->update(['key' => ['key2' => 'value']]);
  1. 批量创建/更新
    $builder->index('index')->batchUpdateOrCreate(
        [
            'id' => '1', 
            'key1' => 'v1',
            'key2' => 'v2',
        ],
        [
            'id' => 2,
            'key3' => 'v3',
            'key4' => 'v4',
        ]       
    );
  1. 删除
    $builder->index('index')->deleteById($id) : bool
  1. 条件删除
    $builder->index('index')->where('a', '=', 1)->delete()
  1. 查询
    //单条查询
    $builder->index('index')->first();
    //列表
    $builder->index('index')->get();
    //分页
    $builder->index('index')->paginate($page, $size) : Collection
    //通过ID查询
    $builder->byId($id) : stdClass
    //查询异常
    $builder->byIdOrFail($id) : stdClass
    //分块查询
    $builder->chunk(callback $callback, $limit = 2000, $scroll = '10m')
  1. 统计计数
    $builder->count() : int
  1. 条件查询
    支持操作符 [‘=’ => ‘eq’,‘>’ => ‘gt’,‘>=’ => ‘gte’,‘<’ => ‘lt’,‘<=’ => ‘lte’,‘!=’ => ‘ne’,]
    $builder->whereTerm('key', 'value');
	//模糊查询
	    //value without add wildcard '*'
    $builder->whereLike('key', 'value');
    //match
    $builder->whereMatch('key', 'value');
    //range
    $builder->whereBetween('key', ['value1', 'value2']);
    //whereIn
    $builder->whereIn('key', ['value1', 'value2', ...]);
    //嵌套查询
    $builder->where(function(Builder $query){
        $query->whereTerm('key', 'value');
    });
    //nested数据类型字段条件查询
    $nestedKey = "nested_key";
    $key = "key";
    $builder->where("{$nestedKey}@{$key}", '=', 'value');
	//nested数据类型组合条件
 	$nestedColumn = "nested_column";
    $builder->whereNested($nestedColumn, function ($query) {
        $query->where('key1', 'value1')
        $query->where('key2', 'value2')
    });

更多用法

关于更多的用法,可以查看源码文件:Vae\PhpElasticsearchOrm\Builder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值