MongoDB 速習チュートリアル

インデックスと検索

1. インデックスと検索の概要

MongoDB Atlas には、コレクション内のドキュメントを高度に検索できる**全文検索(Full-text search)**エンジンが搭載されています。

この Atlas Search は、業界標準の検索ライブラリである Apache Lucene をベースに構築されており、複雑な検索ロジックを高速に処理することが可能です。

2. インデックスの作成

「アグリゲーション入門」セクションでロードしたサンプルデータの sample_mflix データベースを使用して、インデックスを作成してみましょう。操作は Atlas のダッシュボードから行います。

  1. Atlas のダッシュボードから、Cluster名 をクリックし、「Search」 タブを選択します。
  2. 「Create Search Index」 ボタンをクリックします。
  3. 「Visual Editor」 を選択した状態で「Next」をクリックします。
  4. インデックスに名前を付け、インデックス対象とするデータベースとコレクションを選択して「Next」をクリックします。
    • Tips: インデックス名を default に設定すると、後の $search パイプラインステージでインデックス名を明示的に指定する必要がなくなります。
  5. 今回は sample_mflix データベースと movies コレクションを選択してください。
  6. 「Create Search Index」 をクリックし、インデックス作成が完了するまで待ちます。

3. クエリの実行

作成したサーチインデックスを利用するには、アグリゲーションパイプライン内で $search 演算子を使用します。

3.1 実行例

以下のクエリは、映画のタイトルに特定のキーワードが含まれるドキュメントを検索します。

db.movies.aggregate([
  {
    // ステージ 1: 全文検索の実行
    $search: {
      index: "default", // インデックス名が "default" 以外の場合は指定が必須
      text: {
        query: "star wars",
        path: "title" // 検索対象のフィールド
      },
    },
  },
  {
    // ステージ 2: 必要なフィールドのみを抽出
    $project: {
      title: 1,
      year: 1,
    }
  }
])

3.2 処理の詳細解説

  • 第 1 ステージ ($search): movies コレクションの中から、title フィールドに "star" または "wars" という単語が含まれるすべてのドキュメントを返します。
  • 第 2 ステージ ($project): 取得した各ドキュメントから、titleyear フィールドのみを抽出して出力します。