brokerexchange / elasticbuilder
Elasticsearch的查询构建器。
v7.1.2
2023-11-09 17:59 UTC
This package is auto-updated.
Last update: 2024-09-09 19:44:23 UTC
README
Elasticsearch查询的DSL构建器
使用ElasticBuilder将多个查询/过滤器/聚合组合到Laravel项目中Elasticsearch Query DSL中!
许可证
ElasticBuilder遵循MIT开源许可证发布,https://open-source.org.cn/licenses/MIT
版权
ElasticBuilder © Broker Exchange Network 2018
概述
ElasticBuilder是一个Laravel 5.x框架包,包含静态方法和抽象类,可用于构建Elasticsearch查询DSL并将查询输入参数映射到生成的DSL。它还处理分页参数、排序和聚合。提供Laravel框架服务提供者和外观,以及一个可以应用于eloquent模型的特质。
安装
ElasticBuilder必须使用Elasticsearch 1.x或更高版本,以及Laravel 5.x
- 将
"brokerexchange/elasticbuilder": "^1.0.0"
添加到您的composer.json
文件中 - 运行
composer update
- 将提供者
ElasticBuilder\ElasticBuilderServiceProvider::class
添加到您的laravel项目app/config/app.php
中的提供者列表中 - 将外观
'Eb' => ElasticBuilder\Eb::class
添加到您的laravel项目app/config/app.php
中的别名列表中
示例
外观
外观使用示例
这里是如何向查询添加一个子句(在这种情况下是必须子句到bool查询)。
<?php $query = Eb::boolean() ->must(Eb::term('category_id',1)) ->filter(Eb::range('published_at',['lte' => Carbon::now()->toIso8601String(),'gte' => Carbon::now()->subDay(10)->toIso8601String()])); var_dump($query);
<?php $query = \Eb::multi_match(['title^3','summary^1','body','userName^2','categoryName^2','tag_string^1'],'lorim ipsum','and','cross_fields'); var_dump($query);
特质
将特质类应用于eloquent模型(可能是已经使用Elasticquent/Elasticquent或类似包的模型)
<?php use ElasticBuilder\ElasticBuilderTrait; /** * Class Article * @package App */ class Article extends Model { use ElasticBuilderTrait;
现在您可以在模型中使用静态bool、dismax、boosting等查询,类似于eloquent查询构建器!
<?php Article::bool()->filter(Eb::term('category_id','1);
或
<?php Article::dis_max()->query(Eb::match('body',$keywords));
将聚合作为eloquent模型特质进行bool查询
<?php //trait example $results = $article->boolean() ->must(Eb::match('body','keyword search string')) ->aggregate(Eb::agg()->terms('categories','category_id'))->get(); //returns Elasticquent Results Object var_dump($results); //trait exaple with paging $results = $article->boolean() ->must(Eb::match('body','keyword search string')) ->aggregate(Eb::agg()->terms('categories','category_id'))->paginate(20); //returns Elasticquent Paginator Object var_dump($results);
<?php if($this->request->has('search')){ $search = $this->request->get('search'); $match = \Eb::multi_match(['title^3','summary^1','body','userName^2','categoryName^2','tag_string^1'],$search,'and','cross_fields'); } else { $match = \Eb::match_all(); } $this->must($match);
这里是一个从扩展类内部向bool查询添加过滤器的示例
<?php $filter = \Eb::range('published_at',['lte' => Carbon::now()->toIso8601String()]); $this->filter($filter);
其他
更多示例
<?php $query = Article::agg() ->terms('categories','category_id'); var_dump($query);