Overview
このガイドでは、 MongoDB Searchインデックスをクエリし、 C++ドライバー アプリケーションで高度な全文検索機能を使用する方法を学習できます。 $search集計パイプラインライン ステージを使用して検索インデックスをクエリできます。
$search パイプライン ステージの詳細については、MongoDB Server マニュアルの「$search」ガイドを参照してください。
注意
Atlas および Community Edition のバージョン要件
$search 集計パイプライン演算子は、 MongoDB v4.2 以降を実行中MongoDB Atlasクラスター、またはMongoDB v8.2 以降を実行中MongoDB Community Editionクラスターでホストされているコレクションでのみ使用できます。コレクションはMongoDB 検索インデックスでカバーされている必要があります。必要な設定とこの演算子の機能の詳細については、MongoDB 検索するのドキュメントを参照してください。
サンプル データ
sample_mflix.moviesこのガイドの例では、Atlasサンプルデータセットの コレクションを使用します。 MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDBを使い始めるガイドを参照してください 。
MongoDB Search インデックスの作成
Atlasコレクションで検索を実行する前に、まずコレクションにMongoDB Searchインデックスを作成する必要があります。 MongoDB Searchインデックスは、 検索可能な形式でデータを分類するデータ構造です。 MongoDB Searchインデックス の作成方法については、「 MongoDB Search インデックスガイド 」を参照してください。
データの検索
$search集計パイプライン
ステージを使用するには、実行するクエリのタイプを示すMongoDB 検索するクエリ演算子を指定する必要があります。オプションで、コレクターを使用して、クエリ出力の値と範囲を指定できます。MongoDB 検索するで利用可能なすべての演算子とコレクターのテーブルを表示するには、Atlas ドキュメントの「演算子とコレクター」ページを参照してください。
次の例では、compound 演算子を使用して複数の演算子を 1 つのクエリにまとめています。詳細については、Atlas ドキュメントの「 複合演算子 」ガイドを参照してください。
クエリには次の検索条件があります。
genresフィールドにComedyを含めることはできません。titleフィールドには stringNew Yorkが含まれている必要があります。
クエリには、次のステージが含まれます。
int main() { const mongocxx::instance instance{}; try { const mongocxx::client client{mongocxx::uri{"<connection-string>"}}; auto collection = client["sample_mflix"]["movies"]; mongocxx::pipeline pipeline{}; auto search_stage = bsoncxx::from_json(R"( { "$search": { "index": "test_index", "compound": { "mustNot": [ { "text": { "query": [ "Comedy" ], "path": "genres" } } ], "must": [ { "text": { "query": [ "New York" ], "path": "title" } } ] } } } )"); pipeline.append_stage(search_stage.view()); pipeline.limit(10); pipeline.project(bsoncxx::from_json(R"( { "_id" : 0, "title" : 1, "score" : { "$meta" : "searchScore" } } )")); auto cursor = collection.aggregate(pipeline); for (const auto& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; } } catch (const mongocxx::exception& e) { std::cerr << "MongoDB error: " << e.what() << std::endl; return EXIT_FAILURE; } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }
{ "title" : "New York, New York", "score" : 6.7870168685913085938 } { "title" : "New York", "score" : 6.2591872215270996094 } { "title" : "New York Doll", "score" : 5.3819599151611328125 } { "title" : "Escape from New York", "score" : 4.7203946113586425781 } { "title" : "Autumn in New York", "score" : 4.7203946113586425781 } { "title" : "Gangs of New York", "score" : 4.7203946113586425781 } { "title" : "Sleepless in New York", "score" : 4.7203946113586425781 } { "title" : "Sherlock Holmes in New York", "score" : 4.2036685943603515625 } { "title" : "New York: A Documentary Film", "score" : 4.2036685943603515625 } { "title" : "An Englishman in New York", "score" : 4.2036685943603515625 }
詳細情報
使用可能なMongoDB Search 演算子の詳細については、 MongoDB Atlasドキュメントの「 演算子とコレクター 」ガイドを参照してください。
MongoDB 検索するの詳細と、その他のクエリの例については、MongoDB 検索するドキュメントを参照してください。
Atlas に保存されているデータに対してベクトル検索を実行する場合は、 MongoDB ベクトル検索 を使用する必要があります。MongoDB ベクトル検索の詳細については、MongoDB ベクトル検索のドキュメントを参照してください。