You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:37