Laravel 如果 Scout 和 Algolia 停止,切换到 eloquent 搜索
Laravel switch to eloquent search if Scout and Algolia stopped
我正在使用 Scout 和 Algolia 创建我的搜索引擎并使用有限且免费的社区计划。
我想知道如果 Scout 或 Algolia 中出现问题,是否有办法使用 WHERE LIKE
切换回正常的 eloquent 订阅?
是的,您可以使用普通查询在 laravel 中搜索结果。
ModelName::query()
->where('name', 'LIKE', "%{$searchTerm}%")
->orWhere('email', 'LIKE', "%{$searchTerm}%")
->get();
或者简单地构建一个宏来在laravel
中搜索
https://freek.dev/1182-searching-models-using-a-where-like-query-in-laravel
您可以使用后备装饰器来装饰 algolia 引擎,并在发生错误时切换到后备。
class AppServiceProvider extends ServiceProvider
{
/**
* {@inheritdoc}
*/
public function boot(): void
{
resolve(EngineManager::class)->extend(AppSearchEngine::class, function () {
$origin = new AlgoliaEngine();
$fallback = new MySQLEngine();
return new FallbackEngine($origin, $fallback);
});
}
}
class FallbackEngine extends Engine {
...
public function search(Builder $builder)
{
try {
return $this->origin->search();
} ($e \Excheption) {
return $this->fallback->search();
}
}
...
}
我正在使用 Scout 和 Algolia 创建我的搜索引擎并使用有限且免费的社区计划。
我想知道如果 Scout 或 Algolia 中出现问题,是否有办法使用 WHERE LIKE
切换回正常的 eloquent 订阅?
是的,您可以使用普通查询在 laravel 中搜索结果。
ModelName::query()
->where('name', 'LIKE', "%{$searchTerm}%")
->orWhere('email', 'LIKE', "%{$searchTerm}%")
->get();
或者简单地构建一个宏来在laravel
中搜索https://freek.dev/1182-searching-models-using-a-where-like-query-in-laravel
您可以使用后备装饰器来装饰 algolia 引擎,并在发生错误时切换到后备。
class AppServiceProvider extends ServiceProvider
{
/**
* {@inheritdoc}
*/
public function boot(): void
{
resolve(EngineManager::class)->extend(AppSearchEngine::class, function () {
$origin = new AlgoliaEngine();
$fallback = new MySQLEngine();
return new FallbackEngine($origin, $fallback);
});
}
}
class FallbackEngine extends Engine {
...
public function search(Builder $builder)
{
try {
return $this->origin->search();
} ($e \Excheption) {
return $this->fallback->search();
}
}
...
}