tamizh/laravel-es

安装: 253

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 0

开放问题: 4

类型:软件包

v1.0.30 2018-03-21 08:45 UTC

README

用于Elasticsearch的基本ORM软件包(搜索和CRUD功能) - 用于Elasticsearch 5.0及以下版本

安装

composer require tamizh/laravel-es

或在composer.json中添加以下行

"tamizh/laravel-es" : "dev-master",然后运行composer update

配置

将服务提供者添加到您的config/app.php文件中

'providers'     => [
    //...
    Tamizh\LaravelEs\ElasticsearchServiceProvider::class,
],

将外观添加到您的config/app.php文件中

'aliases' => [
    //...
    'Elasticsearch' => Tamizh\LaravelEs\Elasticsearch::class,
],

使用php artisan vendor:publish发布配置文件

修改config/elasticsearch.php。

示例

return [
  'hosts' => [
    env('ES_HOSTS', 'localhost:9200')
  ],
  'log_path' => 'storage/logs/',
];

在您的模型中替代继承Model类的方式,使用Elasticsearch来使用以下功能。

class Log extends Elasticsearch
{
  public $_index = 'logs*';
  public $_type = 'log';
}

可用函数

  1. match & match_phrase - 返回匹配文本的结果

    Log::match('field', 'text')->get()
    Log::matchPhrase('field', 'hello world')->get()
    Log::matchPhrasePrefix('field', 'hello')->get()
    
  2. boolMust, boolMustNot, boolShould, boolShouldNot - 布尔查询(相当于MySQL中的AND和OR)

    Log::boolMust(function($query){
        $query->match('field', 'text');
    })->get()
    
  3. terms - 返回匹配术语数组的结果

    Log::terms('field', array)->get()
    
  4. aggs - 聚合结果(子聚合尚未支持)

    Log::aggs(function($query){
        $query->terms('field')->size(10)->minDocCount(10);
    }, 'top_logs')
    

    通过以下方式实现多个聚合:

    Log::aggs(function($query){
        $query->terms('field')->size(10)->minDocCount(10);
    }, 'top_logs')
    ->aggs(function($query){
        $query->sum('field')
    });
    

    通过以下方式实现子聚合:

    Log::aggs(function($query){
        $query->terms('field')
            ->aggs(function($sub_query){
                $sub_query->sum('field');
            });
    }, 'top_logs')
    

    可用函数 a) terms b) cardinality c) max d) min e) sum_bucket f) sum g) date_histogram(带间隔选项[默认 - 月])h) avg

  5. sort - 对查询结果进行排序

    Log::sort('field', 'desc')
    

    Log::sort(function($query){
        $query->script('return doc['error'].value + doc['success'].value')
    })
    
  6. scroll - 获取滚动迭代器对象

    $results = Log::match('field', 'text')->size(100)->scroll();
    foreach($results as $result){
        // logic goes here
    }
    
  7. size - 结果集合的大小

    Log::match('field', 'text')->size(100)->get()
    
  8. highlight - 突出显示所选文本

    Log::match('field', $text)->highlight('field')->get()
    
  9. first - 获取第一个模型

    Log::match('field', $text)->first()
    
  10. save - 将当前模型保存到ES

    $log = Log::match('field', $text)->first();
    $log->count = $log->count + 1;
    $log->save();
    
  11. delete - 从ES中删除当前模型

    $log = Log::match('field', $text)->first();
    $log->delete();
    

    Log::delete(1);
    
  12. query_string - ES中的查询字符串函数

    $log = Log::queryString(function($query){
        $query->query('tech*')
            ->fields(['errors', 'content']);
    })->get();
    

    布尔函数中

    Log::boolMust(function($query){
        $query->queryString(function($query){
            $query->query('tech*')
                ->fields(['errors', 'content']);
        })
    })->get();
    
  13. exists - 存在条件功能

    $log = Log::exists('field')->get();
    
  14. index - 在ES中索引文档

    Log::index(['key' => 'value', 'key1' => 'value1'], id);
    
  15. update - 在ES中更新文档

    Log::update(['new_key' => 'new_value', 'old_key' => 'new_value'], id);
    
  16. removeKey - 从ES中删除不需要的键

    Log::removeKey('unwanted_key', id);
    
  17. script - 脚本功能

    Log::script("doc['errors'].value > 10")->get()
    
  18. count - 获取当前结果的文档计数

    Log::script("doc['errors'].value > 10")->count()
    
  19. range - 获取介于范围内的结果集

    Log::range('error_rate', ['gte'=>20, 'lte'=>80])->get();
    
  20. rangeBetween - 获取介于范围内的结果集(range的简化版本)

    Log::rangeBetween('error_rate', 20, 30)->get();
    20 -> gte
    30 -> lte
    
  21. from - elasticsearch中的分页选项[MySQL偏移量][仅适用于10000结果窗口,对于更大的分页建议使用scroll]

    Log::match('field', 'text')->size(100)->from(200)->get()
    
  22. paginate - 添加分页[LengthAwarePaginator] 使用此API将为您提供Laravel分页器的完整功能访问

    Log::match('field', 'text')->paginate($perPage, $page)
    

    注意 - 这可以在当前查询的前10000个结果集中使用。 因此,如果您打算使用整个结果集,则更好的选项是使用scroller。

  23. search or searchRaw - 通过原始数组查询进行搜索

    Log::search([
        'body'=>[
            "query"=>[
                "match" => [
                    "field" => "text"
                ]
            ]
        ]
    ])->get()
    

    注意 - 对于查询格式,请参阅官方文档Elasticsearch PHP软件包

  24. topHits - 获取聚合的最顶部的 hits

    Log::aggs(function(){
        $query->terms('user.id')-aggs(function(){
            $query->topHits()->size(5);  // get top 5 hits of the user
        }, 'hits');
    }, 'users')
    
  25. multiMatch - 在多个字段上搜索

    Log::multiMatch(['user','error'], 'query', 'phrase_prefix');
    
  26. fromType - 在特定类型上搜索

    Log::match('field', 'text')->fromType('warinings')->get()
    
  27. find - 通过其ID查找文档

    Log::find("AWAMbhhhXkO5BRWWZAw6");
    
  28. updateByQuery (实验性) - 使用查询更新文档(尚未准备就绪)

    Log::match('field', 'test')->script("doc['update_field'].value = update_value")->updateByQuery()
    

注意

  1. 以下字段名称是保留的 - _id, _type, _index, _highlight

待办事项

  1. 编写测试用例(稳定版本)
  2. 添加更多功能
  3. 索引功能
  4. MySQL查询格式支持