1

一括更新後にドキュメントを読み取るために、エラスティック検索マルチ取得を使用しています。一部のドキュメント ソースが null として返されます。

 MultiGetRequestBuilder builder = client.prepareMultiGet();

 builder.setRefresh(true);

 builder.add(indexName, type, idsList);

 MultiGetResponse multiResponse = builder.execute().actionGet();

 for (MultiGetItemResponse response : multiResponse.getResponses())
 {
         String customerJson = response.getResponse().getSourceAsString();
         System.out.println("customerJson::" + customerJson);
 }

コードに問題はありますか? 前もって感謝します。

4

1 に答える 1

1

「一部のリターン ソースを null として」と言うと、get 応答がそれらを存在しないとマークしていると思います..?

もしそうなら、多分:

  1. マッピング/ランダム エラーにより、バルクの一部のインデックス作成リクエストが失敗しています。

  2. インデックス化とマルチゲットの間にインデックスを更新する必要があります (つまり、ドキュメントはまだ検索できません)

    transportClient.admin().indices().prepareRefresh(index).execute();

幸運を

編集: コメントで独自の質問に答えましたが、読みやすさのために: get または multiget を使用する場合、インデックス作成時にルーティング キーが使用された場合は、get 中に再度指定する必要があります。それ以外の場合、デフォルト ルーティングを使用して間違ったシャードが決定されますget は失敗します。

于 2013-08-27T13:17:47.067 に答える