2016-11-16 34 views
0

私はLaravelプロジェクトに取り組んでおり、OfferのElasticSearchでhttps://laravel.com/docs/5.3/scoutを使用しています。Laravel Scout ElasticSearchでインデックスを更新する方法は?

私はすでに、データベース内のいくつかのオファーを持っているので、私はちょうど

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

コマンドを実行のためのElasticSearchと私の件のデータを使用するためのインデックスを生成します。それはOKだと、私は例えば、と私の申し出に検索することができた後

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

は今、私は私のデータベース内の他のオファーを作成する機能を持っている、と私はインデックスを更新することができます方法を知ってはいけませんこれらの新しいデータを使用するためには?ドキュメントhttps://laravel.com/docs/5.3/scout#adding-records

、私はこれを試してみましたが、ありませんあなたがする必要があるすべてはモデルインスタンスを保存し、それが自動的に検索インデックス

に追加されます

を読むことができ、私が新しいオファーを保存すると、私はそれを私の索引で見つけることができません。

新たにOFferを追加した後にコマンドphp artisan scout:import "App\Models\Offer"を再実行しようとしましたが、同じですが、私のインデックスで見つけることができません。

私は何かを見逃しましたか?何か案は ?

+0

あなたのモデルには '検索可能な '特性がありますか? – Jonathon

+0

私のモデルオファーでこの特性を持っている –

答えて

0

残念ながら私はスカウトを使用しようとしたときにこの問題に直面しました。スカウトが処理できるデータをはるかに上回る速度でプロジェクトのデータが拡大することに気付くまで、すべてうまくいった。ただし、この場合はsave()の代わりにpush()メソッドを使用できます。私はなぜこれが全く文書化されていないのか分かりませんし、むしろイライラしますが、少なくとも答えはあります。

ので使用:

->push()

の代わり:

->save()

をあなたのインデックスを更新します。 これがあなたの特定のバージョンではうまくいかない場合は、別の方法がありますが、少し冗長です。これには、Artisanシステムとのキューシステムとコマンドの組み合わせが含まれます。このあなたがで: - あなたはArtisanの機能 に引き出すことができるので、新しく作成されたジョブ・クラスの最上部にuse Artisan;を追加

    • キュー/仕事php artisan make:job JobNameHere(5.4 Laravel 5.2のように)を作成しますそのジョブ・クラスのハンドルで
    • 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()); 
          } 
      } 
      
    • すべてがうまくいったなら、あなたは、もはやすべてのエラーを取得する必要があり、それに

    を検索して、インデックスをテストしていません。コメントを残して、どのように行ったのか教えてください...まだこの問題がある場合は、

    また、Laravel Scoutは2016年8月現在、ElasticSearchをサポートしていません(私は信じています)。サポートが削除された理由は誰にも分かりませんが、LaravelとElasticの検索を再び連携させるためのチュートリアルがあります。

    私の研究に基づいて、あなたのプロジェクトが小さい場合、Scoutを使用してElasticSearchを使用する必要はありません。あなたのプロジェクトが巨大になるならば、モデル間のLaravelの関係をどのように扱うのかをサポートするパッケージを見つけ出すことをお勧めします。弾性検索はこれを達成することができますが、難しいと考えられる数多くのドキュメントがあります。ここでは、適切な道を進むのに役立ついくつかの半分のチュートリアルです。

    https://tirdeamihai.com/blog/laravel-and-elasticsearch

    https://laravel-news.com/laravel-and-elasticsearch

    プラスチック、それは積極的に取り組まれていますように私は現在、推薦するパッケージです。 Elasticquentは、昨年6月から触れられていないか更新されていません。 https://github.com/sleimanx2/plastic#1---create-a-new-index

  • 関連する問題