2016-11-16 44 views
0

我正在致力於Laravel項目,我在模型Offer上使用https://laravel.com/docs/5.3/scout和ElasticSearch。Laravel Scout如何使用ElasticSearch刷新索引?

我已經在我的數據庫一些優惠,所以我只是執行命令

`php artisan scout:import "App\Models\Offer"` 

用於生成索引的使用我的DATAS與ElasticSearch。

它的確定後,我可以在我的計劃書與搜索,例如:

`$offers = Offer::search($request->keywords)->get();` 

現在我有一個函數在我的數據庫中創建其他優惠,我不知道我怎麼能刷新指數爲了使用這些新數據?

在文檔https://laravel.com/docs/5.3/scout#adding-records,我可以讀

所有你需要做的是保存一個模型實例,它會自動被添加到您的搜索索引

我想這不,當我保存()一個新的優惠時,我無法在我的索引中找到它。

我試圖重新運行命令php artisan scout:import "App\Models\Offer"後添加一個新的OFfer,但它是一樣的,我無法在我的索引中找到它。

我錯過了什麼嗎?有任何想法嗎 ?

+0

你有使用模型中的Searchable特徵,對嗎? – Jonathon

+0

是的,我在我的模特優惠中有這個特質 –

回答

0

對不起,我遲到了,但當我嘗試使用Scout時,我自己遇到了這個問題。一切都很順利,直到我意識到項目的數據將以遠遠超出偵察員可以處理的速度進行擴展。在這種情況下,您可以使用push()而不是save()。我不知道爲什麼沒有記錄,這是相當令人沮喪的,但至少有一個答案。

因此,使用:的

->push()

代替:

->save()

更新索引。 如果這不適用於您的特定版本,還有另一種方法可以實現,但「稍微」是多餘的。它涉及使用排隊系統與Artisan系統和命令的組合。在此你:

  • 創建隊列/工作php artisan make:job JobNameHere(由於Laravel 5.2 - 5.4)
  • 添加use Artisan;到新創建的作業類的頂部,因此您可以在工匠的功能拉
  • 在該作業類的手柄增加

    class JobNameHere implements ShouldQueue { 
    
        ... 
        ... 
    
        public function handle() { 
         Artisan::call('scout:import', ['name' => "App\YourModelNameHere"]); 
        } 
    } 
    
  • 添加調度呼叫到作業類的DB之後進程被調用。 例子:

    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月份以來,彈性頻率尚未被觸及或更新。 https://github.com/sleimanx2/plastic#1---create-a-new-index