2

Elastic4s API と play フレームワークを使用して、いくつかのデータをエラスティック検索にインデックス付けしようとしてい ます

私は基本的にコントローラーからこのメソッドを呼び出しています

 def test(){
 val client = ElasticClient.local
 client.execute { create index "bands" }
 client execute { index into "bands/singers" fields "name"->"chris martin" }
 client.close()

 }

プレイでもエラスティックサーチログでもエラーは出ませんでしたが、

次に、データがインデックス化されているかどうかをSenseプラグインで確認し、取得しました

  {
   "error": "IndexMissingException[[bands] missing]",
  "status": 404
   }

クエリがサーバーに送信されていないようです?? ...

4

3 に答える 3

6

これは、インデックスの作成が同期的ではないため、インデックスの作成が完了する前にインデックスを作成しようとしているためです。

最も簡単な方法は、呼び出して作成インデックスを同期させることです

client.sync.execute { create index "bands" }

インデックスが作成されるまでブロックされます。これは 1 秒未満である必要があります。または、返された未来を処理することもできます。

編集:elastic4s 1.3 では、sync は先物の .await ヘルパーに置き換えられました。

client.execute( create index "bands" ).await

于 2014-02-20T22:04:34.510 に答える
1

確かなことはわかりませんが、Client .execute メソッドがブロックして Res を直接返すのではなく、Future[Res] を返すため、execute 呼び出しが実際には表示されていない例外をスローしている可能性があります。

これについて間違っていたらすみませんが、このライブラリがどのように機能するかを理解しているように聞こえるので、onComplete コールバック (またはScala の先物ページの他の戦略) を使用して何があるかを確認することをお勧めします。未来が実際に完成したときに起こっています。

于 2014-02-16T02:51:20.853 に答える