这是我的问题。我想更新保存在我的控制器存储中的侦察索引。任何想法如何做到这一点?
我正在使用tntsearch包。我知道我可以在命令提示符下执行工匠命令$ php artisan scout:import App\\Models\\Paper
但是我正在开发一个网站,每个人都可以在其中提交他们的期刊,我需要一个强大的搜索引擎在我的网站上。所以在这种情况下,我需要在每次期刊提交时更新索引。让每个人都可以搜索期刊。
我设法通过制作提供者来完成这项任务的一部分TNTSearchScoutServiceProvider
。
这里是 TNTSearchScoutServiceProvider:
class TNTSearchScoutServiceProvider extends \TeamTNT\Scout\TNTSearchScoutServiceProvider
{
public function boot()
{
$this->app[EngineManager::class]->extend('tntsearch', function ($app) {
$tnt = new TNTSearch();
$driver = config('database.default');
$config = config('scout.tntsearch') + config("database.connections.{$driver}");
$tnt->loadConfig($config);
$tnt->setDatabaseHandle(app('db')->connection()->getPdo());
$this->setFuzziness($tnt);
$this->setAsYouType($tnt);
return new TNTSearchEngine($tnt);
});
// To allow us run commands if we're not running in the console
$this->commands([
ImportCommand::class,
]);
}
}
将此提供程序添加到 config/app.php 后。在控制器中,我正在使用这样的提供程序:
Artisan::call('tntsearch:import', ['model' => 'App\Models\Paper']);
但这会引发此错误:
unlink(C:\wamp64\www\mywbsite\storage/papers.index): Resource temporarily unavailable
到目前为止,这是我所做的:虽然它会引发错误,但我只能在搜索结果中获取最后更新的行,并且最旧的行不会出现在搜索结果中。
那么你有什么建议呢?这是更好的方法吗?或者我应该每天检查该站点并运行工匠命令以便可以索引该表?