0

削除する必要がある一連の ID がある場所でprepareDeleteクエリを使用しています。BulkRequest

私が使用した:

BulkRequestBuilder bulkRequest = searchClient.prepareBulk();
for id in ids {
    bulkRequest.add(searchClient.prepareDelete("indexName", "childType", id));
}
BulkResponse bulkResponse = bulkRequest.execute().actionGet();

この削除の構造は ES 2.2.0 では機能していましたが、ES 2.3.0 ではRoutingMissingException.

印刷bilkResponse.buildFailureMessage()して取得した場合

[0]: index [indexName], type [childType], id [215f3228a3c53970883ae0d3b22dae6f], message [[indexName] RoutingMissingException[routing is required for [indexName]/[childType]/[215f3228a3c53970883ae0d3b22dae6f]]]

既存のインデックスの設定/マッピングも変更していません。

その理由は何ですか?

4

2 に答える 2

0

@rahulrocは正しいです。この機能を導入した問題への参照の時系列リストを追加しています。

  1. すべてのシャードに削除をブロードキャストしない(2014)
  2. API の削除: 必要に応じてルーティングが欠落している場合は、ブロードキャストの削除を削除します(2015)
  3. Bulk API: ルーティングが必要だが指定されていない場合、削除に失敗する(2016)

おそらく、アップデート 3 が例外を に表示させたものでしたes-2.3.0has_child したがって、クエリを使用して、子ドキュメント ID から親を取得できます。

于 2016-04-05T17:55:11.350 に答える
0

ここで回答したものと同様の問題のようです

回答を引用して補完する

親子関係がある場合、ルーティングが親に依存するようになったため、子にアクセスしようとするたびに URL で親を指定する必要があります。

あなたの例では、次のことを試してください。

curl -XDELETE http://localhost:9200/indexName/childType/215f3228a3c53970883ae0d3b22dae6f?parent=[parent_id]

これもあなたに役立つかもしれません。子ドキュメントを削除

于 2016-03-31T07:38:33.937 に答える