Undefined array key 'docScores'错误解决(Laravel Scout+TNTSearch)
解决Laravel Scout + TNTSearch驱动的"Undefined array key 'docScores'"错误
先排查索引问题
大概率是索引文件损坏或未正确生成,执行以下命令重建索引:php artisan scout:flush 你的模型类名 php artisan scout:import 你的模型类名比如你的模型是
App\Models\Post,就执行php artisan scout:flush App\Models\Post和php artisan scout:import App\Models\Post。检查版本兼容性
确保tntsearch/scout-tntsearch-driver和laravel/scout的版本匹配。比如Laravel 10对应scout-tntsearch-driver 10.x版本,版本不匹配会导致返回结果结构变化,缺失docScores键。可以在composer.json里指定兼容版本后执行composer update。修改TNTSearchEngine的map方法
如果上面两步没用,直接修改TNTSearchEngine类的map方法,给docScores加存在性判断:
找到vendor/teamtnt/laravel-scout-tntsearch-driver/src/TNTSearchEngine.php里的map方法,把原来访问$results['docScores']的地方改成:$docScores = $results['docScores'] ?? [];这样即使键不存在也不会报错,同时保留正常逻辑。
排查自定义搜索逻辑
如果你的搜索代码里用了raw()或者自定义了查询语句,可能导致TNTSearch返回的结果结构不符合预期。检查是否有这类自定义操作,调整回标准的Scout搜索方法。
内容的提问来源于stack exchange,提问作者booksaremyfood
相关产品推荐
相关产品推荐

