ruger / scout-aws-elastic

该软件包已被废弃,不再维护。没有建议的替代软件包。

Laravel Scout Elasticsearch 驱动器,支持 AWS

v2.2.0 2021-03-31 17:25 UTC

This package is auto-updated.

Last update: 2022-07-28 13:01:41 UTC


README

此软件包是对 babenkoivan/scout-elasticsearch-driver 的封装,增加了 AWS 支持。

需求

该软件包已在以下配置下进行了测试

  • PHP 版本 7.3.*
  • Laravel 框架版本 6.11
  • Elasticsearch 版本 7.1

升级

如果您是从版本 1.2.4 之前的版本升级的,版本 2.0.0 需要 scout_elastic_aws 配置文件重新发布或添加 aws_enabled 键。

'aws_enabled' => env('SCOUT_AWS_ELASTIC_ENABLED', true);

安装

使用 composer 安装软件包

composer require ruger/scout-aws-elastic

配置

为了配置软件包,您需要发布以下设置

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
php artisan vendor:publish --provider="ScoutElastic\ScoutElasticServiceProvider"
php artisan vendor:publish --provider="Ruger\ScoutAwsElastic\ScoutAwsElasticServiceProvider"

发布配置文件后,您可以使用以下 .env 变量配置与您的 Elasticsearch 集群的连接(用您自己的值替换值)

SCOUT_DRIVER=elastic

SCOUT_ELASTIC_HOST=localhost
SCOUT_ELASTIC_SCHEME=https
SCOUT_ELASTIC_PORT=443
SCOUT_ELASTIC_USER=
SCOUT_ELASTIC_PASS=
SCOUT_AWS_ELASTIC_ENABLED=true
SCOUT_AWS_ELASTIC_REGION=us-east-2
SCOUT_AWS_ELASTIC_ACCESS_KEY=<your_aws_access_id>
SCOUT_AWS_ELASTIC_ACCESS_SECRET=<your_secret_aws_key>

用法

由于此软件包是对 babenkoivan/scout-elasticsearch-driver 的封装,所有用法文档都可以在此找到 here

RuleBuilder

可以扩展 RuleBuilder 类以提供动态 bool 查询数组的生成。

这可以与 ScoutElastic 软件包提供的 rule() 函数结合使用。

可用方法

  • public function build(array $rules) - 根据传递的关联数组创建规则数组。
  • protected function must(string $field, $value, array $attributes) - 创建一个必须匹配查询子句。
  • protected funciton mustNot(string $field, $value, array $attributes) - 创建一个必须不匹配查询子句。
  • protected function should(string $field, $value, array $attributes) - 创建一个应该匹配查询子句。
  • protected function filter(string $field, $value, array $attributes) - 创建一个过滤器词查询子句。
  • protected funciton range(string $field, array $values, string type) - 创建一个范围查询子句。

示例

IndexConfigurator

<?php

namespace App;

use ScoutElastic\Migratable;
use ScoutElastic\IndexConfigurator;

class MyModelIndexConfigurator extends IndexConfigurator
{
    use Migratable;
    
    protected $settings = [];
}

模型

<?php

namespace App;

use ScoutElastic\Searchable;
use Illuminate\Database\Eloquent\Model;

class MyModel extends Model
{
    use Searchable;
    
    protected $fillable = [
       'searchField',
       'filterableField'
    ];
    
    protected $indexConfigurator = MyModelIndexConfigurator::class;
}

规则

<?php

namespace App;

class MyRule extends Ruger\ScoutAwsElastic\Builders\RuleBuilder
{
    public function query(string $query): void
    {
        $this->must('query', $query, ['fuzziness' => 'AUTO', 'prefix_length' => 2]);
    }
    
    public function someFilter(string $filter): void
    {
        $this->filter('someFilter', $filter);
    }
}

控制器

<?php

namespace App\Http\Controllers;

use App\MyModel;
use Facades\App\MyRule;
use Illuminate\Http\Request;

class MyController extends Controler
{
    public function search(Request $request)
    {
        $validated = $request->validate([
            'query'      => 'required|string',
            'someFilter' => 'nullable|boolean',
        ]);
        
        // Search with a custom filter
        return MyModel::search('')->rule(function() use ($validated) {
            MyRule::build($validated);
        })->get();
    }
}