インデックスと検索
1. インデックスと検索の概要
MongoDB Atlas には、コレクション内のドキュメントを高度に検索できる**全文検索(Full-text search)**エンジンが搭載されています。
この Atlas Search は、業界標準の検索ライブラリである Apache Lucene をベースに構築されており、複雑な検索ロジックを高速に処理することが可能です。
2. インデックスの作成
「アグリゲーション入門」セクションでロードしたサンプルデータの sample_mflix データベースを使用して、インデックスを作成してみましょう。操作は Atlas のダッシュボードから行います。
- Atlas のダッシュボードから、Cluster名 をクリックし、「Search」 タブを選択します。
- 「Create Search Index」 ボタンをクリックします。
- 「Visual Editor」 を選択した状態で「Next」をクリックします。
- インデックスに名前を付け、インデックス対象とするデータベースとコレクションを選択して「Next」をクリックします。
- Tips: インデックス名を
defaultに設定すると、後の$searchパイプラインステージでインデックス名を明示的に指定する必要がなくなります。 - 今回は
sample_mflixデータベースとmoviesコレクションを選択してください。 - 「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): 取得した各ドキュメントから、titleとyearフィールドのみを抽出して出力します。