14

私はJavaで、いくつかのことを行うファサードの統合テストを行っています。その中には、エラスティック検索データベースへのインデックス操作があります。この柔軟な検索データベースは非常に素朴にセットアップされています (実際には、すぐに使用できるもので、私は学習段階にいます)。挿入は、ここで説明されているように、エラスティック検索からほぼ完全にコピーペーストされた例を使用して、そのファサード内で Java API を使用して非常に素朴に行われます。 /index_.html .

その後、ファサードが正しく機能したかどうかをテストします。その一部は、そのドキュメントが実際にデータベースに挿入されているかどうかを確認することです。これも、elastic のサイトで説明されている方法で行います: http://www.elasticsearch.org/guide/reference/java-api/search.html。特定のペイロードを含むドキュメントを挿入し、同じ方法で検索します。

このテストは、デバッグで実行し、ファサードが何かを行った後にブレークポイントを設定すると機能しますが、このブレークポイントを配置しないか、デバッグで実行しないと、結果が見つからずに失敗します。これは、私が本当に間違ったことをしていると思わせます。また、アプリケーション自体 (挿入など) が機能するため、コピーして貼り付けたコードではなく、統合テストに問題がある可能性があります。

インデックス作成操作が返された後、インデックス作成はまだ実際には完了していないか、検索の前に完了していないレプリケーションが進行中であると思いますが、正確に何が起こるかわかりません。どちらかで解決してください。エラスティックを 1 つのノードと 1 つのシャードにまだ配置しようとはしていません。何か問題があるのか​​もしれませんが、何が正確にわからないので、まだその道をたどっていません。私が言ったように、エラスティックを使い始めたばかりなので、重要で初心者スタイルの何かが欠けているかもしれません. 必要に応じて正確なコードを貼り付けることができますが、前述のように、テストでエラスティック検索サイトから 2 つのコード スニペットを使用することになります。

カスパー

4

2 に答える 2

23

Elasticsearch は、インデックス操作が呼び出された直後にデータを利用できるようにしません。デフォルトでは、追加のデータが到着するまで 1 秒間待機します。ただし、次のように呼び出すことで、elasticsearch ですべてのデータをすぐに利用できるようにすることができますrefresh

client.admin().indices().refresh(refreshRequest()).actionGet();

最終結果を確認する前に、ファサードのインデックス作成が完了してから、この操作を追加してみてください。

于 2012-10-17T14:15:29.133 に答える