Overview
このガイドでは、 MongoDB Searchインデックスをクエリし、 Rubyドライバー アプリケーションで高度な全文検索機能を使用する方法を学習できます。 $search集計パイプラインステージを使用して検索インデックスをクエリできます。
$search パイプライン ステージの詳細については、MongoDB Server マニュアルの「$search」ガイドを参照してください。
注意
MongoDB v4.2 以降の Atlas でのみ利用可能
$search集計パイプライン演算子は、 MongoDB SearchインデックスによってカバーされているMongoDB v 以降を実行中MongoDB4.2 Atlasクラスターでホストされているコレクションでのみ使用できます。必要な設定とこの演算子の機能の詳細については、 MongoDB Search のドキュメント を参照してください。
サンプル データ
このガイドの例では、Atlasサンプルデータセットの sample_mflix.moviesコレクションを使用します。無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、Rubyドライバーを使い始める を参照してください。
MongoDB Search インデックスの作成
Atlasコレクションで検索を実行する前に、まずコレクションにMongoDB Searchインデックスを作成する必要があります。 MongoDB Searchインデックスは、 検索可能な形式でデータを分類するデータ構造です。 MongoDB Searchインデックスの作成方法については、「 MongoDB Search とMongoDB ベクトル検索インデックスのガイド 」を参照してください。
データの検索
$search集計パイプラインステージを使用するには、実行するクエリのタイプを示すMongoDB Searchクエリ演算子を指定する必要があります。オプションで、コレクターを使用して、クエリ出力の値と範囲を指定できます。 MongoDB Search で利用可能なすべての演算子とコレクターのテーブルを表示するには、Atlas ドキュメントの「 演算子とコレクター 」ページを参照してください。
次の例では、compound 演算子を使用して複数の演算子を 1 つのクエリにまとめています。詳細については、Atlas ドキュメントの「 複合演算子 」ガイドを参照してください。
クエリには次の検索条件があります。
genresフィールドにComedyを含めることはできません。titleフィールドには stringNew Yorkが含まれている必要があります。
クエリには、次のステージが含まれます。
pipeline = [ { "$search" => { "index" => "index_name", "compound" => { "mustNot" => [ { "text" => { "query" => ["Comedy"], "path" => "genres" } } ], "must" => [ { "text" => { "query" => ["New York"], "path" => "title" } } ] } } }, { "$limit" => 10 }, { "$project" => { "_id" => 0, "title" => 1, "score" => { "$meta" => "searchScore" } } } ] result = collection.aggregate(pipeline) puts result.to_a
{'title': 'New York, New York', 'score': 6.786379814147949} {'title': 'New York', 'score': 6.258603096008301} {'title': 'New York Doll', 'score': 5.381444931030273} {'title': 'Escape from New York', 'score': 4.719935417175293} {'title': 'Autumn in New York', 'score': 4.719935417175293} {'title': 'Sleepless in New York', 'score': 4.719935417175293} {'title': 'Gangs of New York', 'score': 4.719935417175293} {'title': 'Sherlock Holmes in New York', 'score': 4.203253746032715} {'title': 'New York: A Documentary Film', 'score': 4.203253746032715} {'title': 'An Englishman in New York', 'score': 4.203253746032715}
詳細情報
使用可能なMongoDB Search 演算子の詳細については、 MongoDB Atlasドキュメントの「 演算子とコレクター 」ガイドを参照してください。
MongoDB Search の詳細と、その他のクエリ例については、 MongoDB Search のドキュメント を参照してください。
Atlas に保存されているデータに対してベクトル検索を実行する場合は、 Atlas ベクトル検索を使用する必要があります。 MongoDB ベクトル検索の詳細については、 Atlas ベクトル検索 のドキュメントを参照してください。