クエリーによる削除

検索条件に基づいてデータを削除し、クエリーのベスト・プラクティスで削除します。

クエリーによる削除は、すべてのドキュメントに一致するクエリーを含む、ワイルドカード・クエリーを受け入れなくなりました(たとえば、<delete><query>*:*</query></delete>など)。代わりに、CQL TRUNCATEコマンドを使用します。

クエリーによる削除は、検索条件に基づいたデータの削除をサポートしています。クエリーによる削除を発行すると、ドキュメントは即座に削除され始め、削除はすべてのドキュメントが削除されるまで続きます。たとえば、このコマンドを使用して、挿入したデータを削除することができます。

curl http://localhost:8983/solr/mykeyspace.mysolr/update --data '<delete><query>color:red</query></delete>' -H 'Content-type:text/xml; charset=utf-8'

false(デフォルト)に設定した&allowPartialDeletesパラメーターを使用すると、ノードがダウンしている場合の削除を回避できます。trueに設定した&allowPartialDeletesを使用すると、ノードがダウンしている場合に削除が失敗し、削除がクォーラムの整合性レベルを満たしません。*:*を使用したクエリーによる削除は、これらの規則の例外です。これらのクエリーはTRUNCATEを発行し、続行するためにすべてのノードが稼働していることを要求します。

ベスト・プラクティス

DataStaxは、クエリーによる削除操作のクエリーが更新されていないカラムにタッチすることをお勧めします。たとえば、更新されないカラムは、複合プライマリ・キーの要素の1つです。

クエリーによる削除に関する問題の例

次のワークフローは、このベスト・プラクティスに従わないことが問題であることを示しています。

  • 検索コーディネーターがクエリーによる削除リクエストを受信すると、そのリクエストは検索データ・センター内のすべてのノードに転送されます。
  • 各検索ノードで、クエリーはローカルで実行して削除候補を特定し、LOCAL_ONE整合性レベルがそれらの各候補のクエリーを削除します。
  • これらのデータベースの削除がクラスター全体の適切なノードで認識されると、レコードは検索インデックスから削除されます。

たとえば、証明書の表では、各証明書にタイムスタンプの発行日があります。証明書が更新されると、新しい発行日が行に書き込まれ、その書き込みはすべてのレプリカに伝搬されます。この例では、1つのレプリカがそれを見逃していると仮定します。指定した日付よりも発行日が古いすべての証明書を削除する定期的なクエリーによる削除を実行すると、"証明書の更新"で書き込みを見逃したレプリカが削除クエリーと一致すると、意図しない結果が生じます。証明書は、すべてのデータ・センターでクラスター全体から削除され、その削除は回復不能になります。