Laravel-RediSearch允许索引和搜索Laravel模型。它提供了Laravel Scout驱动程序。
安装
composer require ethanhann/laravel-redisearch
注册提供商
将此条目添加到config / app.php中的providers数组中。
Ehann\LaravelRediSearch\RediSearchServiceProvider::class
配置侦查驱动程序
在config / scout.php中更新Scout驱动程序。
'driver' => env('SCOUT_DRIVER', 'ehann-redisearch'),
定义可搜索架构
定义将在索引上使用的字段类型
<?php
namespace App;
use Laravel\Scout\Searchable;
...
use Ehann\RediSearch\Fields\TextField;
use Ehann\RediSearch\Fields\GeoField;
use Ehann\RediSearch\Fields\NumericField;
use Ehann\RediSearch\Fields\TagField;
use Ehann\RediSearch\Fields\GeoLocation;
...
class User extends Model {
use Searchable;
public function searchableAs()
{
return "user_index";
}
public function toSearchableArray()
{
return [
"name" => $this->name,
"username" => $this->username,
"location" => new GeoLocation(
$this->longitude,
$this->latitude
)
"age" => $this->age,
];
}
public function searchableSchema()
{
return [
"name" => TextField::class,
"username" => TextField::class,
"location" => GeoField::class,
"age" => NumericField::class
];
}
}
导入模型
导入配置为可搜索的“产品”模型:
artisan ehann:redisearch:import App\\Product
导入前删除索引:
artisan ehann:redisearch:import App\\Product --recreate-index
导入没有ID字段的模型(应该很少使用):
artisan ehann:redisearch:import App\\Product --no-id
查询过滤器
如何查询过滤器?过滤标签字段
App\User::search("Search Query", function($index){
return $filter->geoFilter("location", 5.56475, 5.75516, 100)
->numericFilter('age', 18, 32)
})->get()
有关其他信息,请参见Laravel Scout文档