Laravel中如何为特定路由禁用Typesense搜索分析?
解决Laravel Scout + Typesense 禁用特定路由搜索分析的问题
由于Typesense官方没有提供内置方式针对特定路由禁用搜索分析记录,我们可以通过扩展Laravel Scout的Typesense引擎,结合中间件实现需求:
步骤1:自定义Typesense引擎类
创建继承自官方引擎的自定义类,在搜索方法中添加分析开关控制逻辑:
// app/Search/Engines/CustomTypesenseEngine.php namespace App\Search\Engines; use Laravel\Scout\Engines\TypesenseEngine; use Laravel\Scout\Builder; class CustomTypesenseEngine extends TypesenseEngine { public function search(Builder $builder) { // 从请求中获取禁用分析的标记 $disableAnalytics = request()->get('disable_analytics', false); // 构建默认搜索参数 $searchParameters = $this->buildSearchParameters($builder); // 若需禁用,添加Typesense的禁用分析参数 if ($disableAnalytics) { $searchParameters['enable_analytics'] = false; } return $this->typesense->collections[$builder->index]->documents->search($searchParameters); } }
步骤2:替换默认Typesense引擎
在AppServiceProvider的boot方法中,注册自定义引擎替换官方实现:
// app/Providers/AppServiceProvider.php use Laravel\Scout\EngineManager; use App\Search\Engines\CustomTypesenseEngine; use Typesense\Client; public function boot() { resolve(EngineManager::class)->extend('typesense', function ($app) { $client = new Client($app['config']->get('scout.typesense')); return new CustomTypesenseEngine($client, $app['config']->get('scout.typesense.api_key')); }); }
步骤3:创建中间件自动禁用API路由分析
创建中间件,为所有API路由自动设置禁用分析标记:
// app/Http/Middleware/DisableSearchAnalytics.php namespace App\Http\Middleware; use Closure; class DisableSearchAnalytics { public function handle($request, Closure $next) { // 向请求注入禁用分析的标记 $request->merge(['disable_analytics' => true]); return $next($request); } }
步骤4:将中间件加入API路由组
在Kernel.php中把中间件添加到API路由组,确保所有API请求触发禁用逻辑:
// app/Http/Kernel.php protected $middlewareGroups = [ 'api' => [ // 保留原有中间件... \App\Http\Middleware\DisableSearchAnalytics::class, ], ];
手动控制(可选)
若不需要全局禁用API路由分析,可在特定查询中手动控制:
// 控制器中手动设置禁用标记 request()->merge(['disable_analytics' => true]); $results = Post::search('你的查询内容')->get();
原理说明:Typesense搜索API支持enable_analytics=false参数,用于跳过当前查询的分析记录,我们通过扩展Scout引擎动态添加该参数实现需求。
内容的提问来源于stack exchange,提问作者MaherRemitaDZ
相关产品推荐
相关产品推荐

