読者です 読者をやめる 読者になる 読者になる

Amazon CloudSearch のドメインから全ドキュメントを削除する

CloudSearch の検証中にドメイン内の全ドキュメントを削除したくなったのだが、

Troubleshooting Amazon CloudSearch - Amazon CloudSearch

Deleting All Documents in an Amazon CloudSearch Domain

Amazon CloudSearch currently does not provide a mechanism for deleting all of the documents in a domain.

とのことで、いまのところ公式ではその手段が提供されていない。 新しいドメインを作りなおすといちいち待ち時間が発生するのでうまくない。

Amazon CloudSearch 用 deleteByQuery を書きました。 - よしだのブログ を参考にしてもよかったが、Python には不慣れなのと、ちょっと大仰な気がしてうまくやれる方法がないか考えてみた。

$ rm -f delete.json && rm -f tmp.json && aws cloudsearchdomain search --endpoint-url https://<Search Endpoint> --query-parser lucene --search-query "*:*" --size 5000 | jq '.hits.hit[].id' | while read i;do echo -n {\"type\": \"delete\", \"id\": ${i}}, >> tmp.json ;done; sed 's/\(.*\),/[\1]/' tmp.json > delete.json

上記で、削除用のバッチファイルを作成し(Preparing Your Data for Amazon CloudSearch - Amazon CloudSearch)、

$ aws cloudsearchdomain --endpoint-url https://<Document Endpoint> upload-documents --content-type application/json --documents delete.json

AWS CLI でデータの更新ができる(http://docs.aws.amazon.com/cloudsearch/latest/developerguide/uploading-data.html#uploading-data-clt)。

Amazon Linux を使っていれば追加でインストールするのは jq のみなので、こっちのほうが準備は簡単かな?

2015年9月25日追記

aws cloudsearchdomain search の size オプションは10,000 が上限のようだ。
それ以上のドキュメントが入ってる場合にはちょっと考えないといけない。