ruger / scout-aws-elastic
该软件包已被废弃,不再维护。没有建议的替代软件包。
Laravel Scout Elasticsearch 驱动器,支持 AWS
v2.2.0
2021-03-31 17:25 UTC
Requires
- php: ^7.4|^8.0
- aws/aws-sdk-php: ^3.0
- babenkoivan/scout-elasticsearch-driver: ^4.3
- laravel/scout: ^7.0|^8.0
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(); } }