brokerexchange/elasticbuilder

Elasticsearch的查询构建器。

v7.1.2 2023-11-09 17:59 UTC

README

Latest Stable Version Latest Unstable Version Total Downloads License composer.lock

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);