_delete_by_queryで空いたストレージを利用したい

elasticsearch6.4.0

インデックスから条件に該当するデータを_delete_by_queryで削除し削除して確保できるであろうストレージを利用したいと考えています。

実際に試したところ、_delete_by_query実行前と実行後で
kibana->Management-> Index managementで参照できる
インデックスのPrimary Storage Sizeが下がるものだと思っていましたが、変化しません。

どこかで_delete_by_queryは削除マークを付けただけ(論理削除)という説明を見ました。
削除マークを付けたレコードに対してストレージから削除指示するにはどのような操作(クエリ)を実行したらよいかご教授いただけますでしょうか。

即座にディスクを空けたいということでしたらば、forcemergeが使えるかもしれません。

also frees up the space used by deleted documents. Merging normally happens automatically, but sometimes it is useful to trigger a merge manually.

ここで、削除されたドキュメントのスペースを空けるとあり、
マージは通常自動的に行われるが、手動でやるときに役立つとあります。
今回、即座に空けたいということであれば、このAPIが使えるのではと思いました。

(参考) 類似の問い合わせ

ご参考になれば幸いです。

1 Like

tsgkdtさん
ありがとうございます。
返信遅れましたが、提示いただいたAPIで削除してストレージが解放されることが確認できました。
ありがとうございます。

あと実行したときの挙動だけこの場で共有させていただくと
・DELETE_BY_QUERY実行時、一時的にストレージが圧迫される
・(マシンスペック等によるかと思いますが)約4000万ドキュメントを削除する際、QUERYで約2日、ForceMergeで約半日程度かかりました。