株式会社スタイリィでは一緒に働く仲間を募集しています
Cloudsearchの動的フィールド活用
こんにちは、エンジニアの大島です。
最近、AWSの全文検索フルマネージドサービスのCloudsearch使っています。検索やDBに使うインスタンス管理がいらないところがとても便利です。
cloudsearchでは検索に使用する列ごとにインデックスを作成するのですが、この再構築コストがかなり大きい。対象のインデックスは再構築中は利用不可となり、検索でヒットしなくなってしまいます。
そこで、「動的フィールド」を利用します。
https://docs.aws.amazon.com/ja_jp/cloudsearch/latest/developerguide/using-dynamic-fields.html
例えば「type_*」という名前でtext型のフィールドを作成すれば、type_aもtype_xyzも、インデックス再構築をせずにインデックス設定ができます。
「*」というフィールドを作成してしまえば、あらゆるフィールド名のインデックスを同じ型で動的に作成できます。
ただし、この場合は予期していないドキュメントがアップロードされた場合も正常終了してしまうので、ある程度ルールを決めておいて(type_* などを作成し)、それ以外のフィールド名はエラーとする(「*」は作成しない)方が良いかなと思います。作成できるインデックス数にも上限があり、インデックスが増えるとパフォーマンスも低下しますので。
動的フィールドの検索については、フィールド名を指定すればそのままできるのですが、調査中のところもありまた次回以降で。