Posted at

AWSのCloudSearch検討


CloudSearch利用方法

こちらが丁寧に説明しています。

https://dev.classmethod.jp/cloud/aws/amazon-cloudsearch-japanese-text/

公式ドキュメント

https://docs.aws.amazon.com/ja_jp/cloudsearch/latest/developerguide/what-is-cloudsearch.html


検索ターゲットの更新方法

Upload Documentからファイルをアップロードすることで更新することができます。もちろん、SDKやCLIからもアップロードできます。一度アップロードしたファイルに1行足して再アップロードした場合、新規の1行だけ追加されたので、差分だけ反映してくれるみたいです。


用語

ドキュメントとバッチという言葉が出てきますが、ドキュメントがCSVの1レコード、バッチはCSVファイルに当たりそうです。


登録・更新時の注意点

ドキュメントアップロード時の制限が以下に書かれています。

https://docs.aws.amazon.com/ja_jp/cloudsearch/latest/developerguide/limits.html

一度にアップロードするファイルのサイズ(バッチサイズ)に制限があるため、分割して順次アップロードしていく仕組みが必要そうです。

また、10秒に1つのバッチしかアップロードできないので、頻度についても制御が必要ですね。

データ抽出[lambda]->file分割[lambda]->upload[lambda]

みたいなワークフローを組むと良さそうな気がします。

制限の緩和を申請することもできます。


検索方法のカスタマイズ

Analysis Schemesから検索方法をカスタマイズできます。


インデックスを更新中のエンドポイントはどうなるか

再インデックス中も特にエンドポイントが利用できなくなるということはなさそうです。

ただ、Analysis Schemesを更新後に検証も無しに本番のAPIが変わってしまうのも辛いので、別でエンドポイントを作成し、よかったらAPIGWで公開されるエンドポイントを変更する、という方法が良さそうです。


検索方法

SDKやCLIから検索することができます。

https://docs.aws.amazon.com/ja_jp/cloudsearch/latest/developerguide/submitting-search-requests.html

また、APIGWと統合してAPIとしてHTTPで公開することもできます。

検索したい文字列はQueryStringに設定します(パラメータ名はq


費用感

一番小さい検索インスタンスを利用した場合。

項目
概算料金
備考

検索インスタンス(search.m1.small)
$ 61 / 1ヶ月
1ヶ月31日計算

そのほかバッチアップロード(1,000 件のバッチアップロードリクエストごとに 0.10 USD (各バッチの最大サイズは 5 MB))やデータ転送にも課金されますが、そんなに大きくはならない気もする。。。

ElasticSearchServiceで構築する場合、冗長化するには最低でも3インスタンス必要なようなので、比較的安い気もします。

また、ElasticSearchServiceではシノニムを更新したりする場合インデックスの再作成が必要らしいのでCloudSearchの方が運用も楽かも。。?