我正在开发一个Laravel项目,并且我正在模型Offer
上使用https://laravel.com/docs/5.3/scout和ElasticSearch。
我的数据库中已有一些优惠,所以我只需运行命令
`php artisan scout:import "App\Models\Offer"`
用于生成索引以使用我的数据与ElasticSearch。
之后没关系,我可以搜索我的优惠,例如:
`$offers = Offer::search($request->keywords)->get();`
现在我有一个在我的数据库中创建其他商品的功能,我不知道如何刷新索引以使用这些新数据?
在文档https://laravel.com/docs/5.3/scout#adding-records中,我可以阅读
您需要做的就是保存模型实例,它会自动添加到您的搜索索引
我试过这个而不是,当我保存()一个新的优惠时,我无法在我的索引中找到它。
我在添加新OFfer之后尝试重新运行命令php artisan scout:import "App\Models\Offer"
,但它是一样的,我无法在索引中找到它。
我错过了什么吗?有任何想法吗 ?
答案 0 :(得分:0)
很抱歉对此有迟到的回复,但是当我尝试使用Scout时,我自己遇到了这个问题。一切都很顺利,直到我意识到该项目的数据将以远远超出侦察员能够处理的速度扩展。但是,在这种情况下,您可以使用push()
方法而不是save()
。我不确定为什么这根本没有记录,而且相当令人沮丧,但至少有一个答案。
所以使用:
->push()
而不是:
->save()
更新索引。
如果这对你的特定版本不起作用,你可以采用另一种方式,但它是"稍微"多余的。它涉及使用队列系统与Artisan
系统和命令的混合。在这个你:
php artisan make:job JobNameHere
(自Laravel 5.2 - 5.4起) use Artisan;
添加到新创建的作业类的顶部,以便您可以提供Artisan的功能在该Job Class的句柄中添加
class JobNameHere implements ShouldQueue {
...
...
public function handle() {
Artisan::call('scout:import', ['name' => "App\YourModelNameHere"]);
}
}
在调用DB push()
进程后立即向该作业类添加调度调用。
示例:
class YourController extends Controller {
public function yourUpdateMethod(Request $request) {
//Some code you wrote
//Some more code you wrote
$update_obj->push( $array_to_update_obj);
dispatch(new JobNameHere());
}
}
通过搜索来测试您的索引
如果一切顺利,那么你不应该再犯任何错误。请发表评论,让我知道它是怎么回事......只要你还有这个问题。
我还想提一下,截至2016年8月,Laravel Scout不再支持ElasticSearch了(我相信)。没有人真正知道为什么支持被删除了,但是有一些教程可以帮助你让Laravel和Elastic搜索再次协同工作。
根据我的研究,我还会注意到,如果您的项目很小,那么您可以使用Scout并且不需要使用ElasticSearch。如果您的项目将变得庞大,那么您最好找到一个支持并很好地记录Laravel模型之间关系的程序包。弹性搜索能够实现这一目标,但是有大量的文档使得难以理解。这里有一些半正式的教程,可以帮助您走上正确的道路。
https://tirdeamihai.com/blog/laravel-and-elasticsearch
https://laravel-news.com/laravel-and-elasticsearch
塑料是我目前推荐的包装,因为它正在积极开展工作。自去年6月以来,Elasticquent尚未被触及或更新。 https://github.com/sleimanx2/plastic#1---create-a-new-index