microCMSで検索機能を実装するときの注意点

検索機能のパフォーマンス最適化を行う際に開発者が知っておくべきポイントを紹介します

投稿日: 2024年10月5日

最終更新日: 2024年10月5日

初めに

柔軟で使いやすいヘッドレスCMSの1つにmicroCMSがあります。microCMSを利用する場合は、基本的なバックエンド処理をmicroCMSに任せることになりますが、microCMSにはパフォーマンス上の制約があります。今回は公式が提供している記事を基に、注意点を考察します。

部分一致検索

filtersとcontainsの組み合わせを避ける

例えば複数のタグを単一のtagsテキストフィールドに格納している場合は、?filters=tags[contains]タグ名のようにfiltersプロパティーによる部分一致検索ができます。しかし、filtersプロパティーに対してcontainsを使うと、microCMSに登録したデータが1つずつ参照されるためパフォーマンスが低下し、検索結果が返されるまでの時間が増加します。公式が推奨する実装方法を参考にタグ検索機能を実装するか、あるいは最初に全ての記事を取得し、特定のタグにマッチする記事をアプリのバックエンドでフィルタリングする必要があります。

また、思い切ってタグ検索を全文検索に置き換えてしまう方法もあります。microCMSはqプロパティーによる全文検索に対応しています。microCMSによる全文検索では、複数のフィールドのデータに基づいて、キーワードにマッチするコンテンツが検索されます。複雑な検索には前述した方法を使い、単純な検索にはqプロパティーを使うのがおすすめです。

範囲検索

テキストフィールドやテキストエリアは文字列のフィールドであり、文字列のフィールドに対して範囲検索をすると検索時間が増加します。数値や日付のフィールドであれば検索時間を抑えられるようです。文字列に対して範囲検索をすると文字ごとに比較が行われ、計算量が大きくなるためと考えられます。

論理演算による検索

ANDやORなどの論理演算を用いた複雑な検索クエリは、データベースに大きな負荷をかける可能性があります。そのため、以下のような流れで検索結果を得ることが推奨されています。

  1. 論理演算子で接続されたクエリを、独立したクエリに分割する
  2. 全てのクエリを並行実行する
  3. 全てのレスポンスを受け取るまで待つ
  4. アプリのバックエンドで論理演算をして最終的な検索結果を得る