【问题标题】:Laravel Scout how refresh index with ElasticSearch?Laravel Scout 如何用 ElasticSearch 刷新索引?
【发布时间】:2023-03-10 02:40:02
【问题描述】:

我正在开发一个 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",但还是一样,在我的索引中找不到。

我错过了什么吗?有任何想法吗 ?

【问题讨论】:

  • 你的模型中有used Searchable 特征,对吧?
  • 是的,我的模特优惠中有这个特点

标签: laravel elasticsearch laravel-5.3


【解决方案1】:

抱歉,我在尝试使用 Scout 时自己遇到了这个问题。一切都很顺利,直到我意识到该项目的数据将以远远超出 scout 处理能力的速度扩展。但是,在这种情况下,您可以使用push() 方法而不是save()。我不确定为什么根本没有记录这一点,这很令人沮丧,但至少有一个答案。

所以使用:

->push()

代替:

->save()

更新您的索引。 如果这对您的特定版本不起作用,那么您可以使用另一种方法,但它“有点”多余。它涉及将队列系统与Artisan 系统和命令结合使用。在这你:

  • 创建队列/作业php artisan make:job JobNameHere (从 Laravel 5.2 - 5.4 开始)
  • use Artisan; 添加到新创建的 Job Class 的顶部,以便您可以使用 Artisan 的功能
  • 在该作业类的句柄中添加

    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

Plastic 是我目前推荐的一个包,因为它正在积极开发中。自去年 6 月以来,Elasticquent 就没有被触及或更新过。 https://github.com/sleimanx2/plastic#1---create-a-new-index

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多