像使用 Laravel Query 一样的搜索 Elasticsearch
需要使用到ES大数据引擎,但无奈,不管是官方包还是Github上都没有找到自己想要的,那还说什么呢,自己操刀来一份吧。Github地址:https://github.com/crcms/elasticsearch
Composer和安装和Laravel下的加载
Version Matrix
Elasticsearch Version | crcms/elasticsearch Branch |
---|---|
>= 6.0 | 1.* |
>= 5.0, < 6.0 | 0.* |
Install
composer require crcms/elasticsearch
Laravel
Modify config / app.php
'providers' => [
CrCms\ElasticSearch\LaravelServiceProvider::class,
]
Pubish
php artisan vendor:publish --provider="CrCms\ElasticSearch\LaravelServiceProvider"
直接开始,示例如下:
Quickstart
Create
Route::get('test/create',function(\CrCms\ElasticSearch\Builder $builder){
$result = $builder->index('index')->type('type')->create([
'key' => 'value',
]);
dump($result);
});
Update
Route::get('test/update',function(\CrCms\ElasticSearch\Builder $builder){
$result = $builder->index('index')->type('type')->update('id',[
'key' => 'value2',
]);
dump($result);
});
Delete
Route::get('test/delete',function(\CrCms\ElasticSearch\Builder $builder){
$result = $builder->index('index')->type('type')->delete('id');
dump($result);
});
Select
Route::get('test/select',function(\CrCms\ElasticSearch\Builder $builder){
$builder = $builder->index('index')->type('type');
//SQL:select ... where id = 1 limit 1;
$result = $builder->whereTerm('id',1)->first();
//SQL:select ... where (key=1 or key=2) and key1=1
$result = $builder->where(function (Builder $inQuery) {
$inQuery->whereTerm('key',1)->orWhereTerm('key',2)
})->whereTerm('key1',1)->get();
});
More
skip / take
$builder->take(10)->get(); // or limit(10)
$builder->offset(10)->take(10)->get(); // or skip(10)
term query
$builder->whereTerm('key',value)->first();
match query
$builder->whereMatch('key',value)->first();
range query
$builder->whereBetween('key',[value1,value2])->first();
where in query
$builder->whereIn('key',[value1,value2])->first();
logic query
$builder->whereTerm('key',value)->orWhereTerm('key2',value)->first();
nested query
$result = $builder->where(function (Builder $inQuery) {
$inQuery->whereTerm('key',1)->orWhereTerm('key',2)
})->whereTerm('key1',1)->get();
更多的使用方法详见Github
最后:如果对您有用请给个Star吧,更多的是欢迎拍砖,支持开源。
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
@Summer 感谢!
这个好!
@纸牌屋弗兰克 ,因为之前查看github上很多都是直接一个query($params),如:
里面有一堆需要自己添加的数组结构才可以,感觉很不好用,所以想着自己开发一个。
目前功能可用,也用于实际项目中,欢迎提出一些好的改进和扩充的建议。
不错不错
@BradStev 欢迎拍砖 :smiley:
es使用"elasticsearch/elasticsearch": "~6.0"包,如果删除不存在的数据会抛出异常,楼主有什么解决方法吗?不抛异常
@rufo 几种方法
1、可在以删除外层自己捕获异常处理
2、删除之前使用first()方法判断
3、自己扩展相应的组件处理
lumen怎么使用呢
搜索结果不太准:
构建的查询:



es数据:
查询结果:
楼主,这里的方法如何使用正则表达式来匹配?
楼主:这个如何处理呢?安装下来后查询就提示这个
@yan_test 需要在search.php的host属性中增加你的es地址,需要带上端口
@hiword 感谢楼主,在config\search.php中'hosts' => ['127.0.0.1:9200']加上端口就可以了,,
@hiword 依赖注入后 连续执行俩个语句 where条件会叠加 能更新一下composer 包么
@❤seven 刚刚更新,7.0测试版本
@❤seven 新版本不会再出现这个问题了,老版本,你可以重新使用laravel make一下实例