Overview
このガイドでは、Java ドライバーを使用してコレクションに対して MongoDB Search クエリを実行する方法を学ぶことができます。MongoDB Search を使うと、MongoDB Atlas でホストされているコレクションを全文検索できます。MongoDB Search インデックスは、検索の動作とインデックスを作成するフィールドを指定します。
サンプル データ
このガイドの例では、Atlasサンプルデータセットのsample_mflixデータベース内のmoviesコレクションを使用します。MongoDB配置を作成し、サンプルデータセットをロードする方法については、 MongoDB の使用開始 ガイドを参照してください。集計操作とビルダの詳細については、集計ガイドをご覧ください。
MongoDB 検索クエリを実行する
このセクションでは、コレクションに対してMongoDB 検索クエリを実行するための集計パイプラインを作成する方法について説明します。Aggregates.search() ビルダ メソッドを使用して、検索条件を指定する $searchパイプラインステージを作成できます。次に、aggregate() メソッドを呼び出し、パイプラインをパラメーターとして渡します。
注意
MongoDB v4.2 以降の Atlas でのみ利用可能
この集計パイプライン演算子は、v4.2 以降を実行している MongoDB Atlas クラスターでホストされているコレクションでのみ利用可能で、MongoDB Search インデックスによってカバーされている必要があります。必要なセットアップとこの演算子の機能については、 MongoDB Search ドキュメントを参照してください。
MongoDB Search クエリを実行する前に、コレクションに MongoDB Search インデックスを作成する必要があります。MongoDB Search インデックスをプログラムで作成する方法については、インデックスガイドの「MongoDB Search および Vector Search インデックス」セクションを参照してください。
MongoDB 検索するの例
この例では、次のアクションを実行してMongoDB 検索クエリを実行します。
Aggregates.search()ビルダ メソッドを使用して$searchステージを構築し、ドライバーにtitleフィールドに"Alabama"という単語が含まれているドキュメントをクエリするよう指示します。Aggregates.project()ビルダ メソッドを使用して$projectステージを構築し、クエリ結果にtitleフィールドを含めるようにドライバーに指示しますパイプラインのステージを
aggregate()メソッドに渡し、結果を出力します。
collection.aggregate( Arrays.asList( Aggregates.search(SearchOperator.text( SearchPath.fieldPath("title"), "Alabama")), Aggregates.project(Projections.include("title")) ) ).forEach(doc -> System.out.println(doc.toJson()));
{"_id": {"$oid": "..."}, "title": "Alabama Moon"} {"_id": {"$oid": "..."}, "title": "Crazy in Alabama"} {"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}
Tip
Java ドライバー MongoDB Search の例
Java ドライバーを使用して MongoDB Search クエリを実行する例の詳細については、Atlas ドキュメントの「MongoDB Search チュートリアル」を参照してください。
MongoDB 検索する メタデータ
searchMeta() メソッドを使用して $searchMeta パイプラインステージを作成し、MongoDB Search 結果からメタデータのみを返します。
Tip
MongoDB v4.4.11 以降の Atlas でのみ利用可能
この集計パイプライン演算子は、v4.4.11 以降を実行している MongoDB Atlas クラスターでのみ利用可能です。バージョンの詳細なリストについては、MongoDB Atlas ドキュメントの「$searchMeta」を参照してください。
次の例では、 MongoDB Search集計ステージの nearメタデータを示しています。
Aggregates.searchMeta( SearchOperator.near(2010, 1, fieldPath("year")));
このヘルパーメソッドの詳細については、searchMeta() APIドキュメント を参照してください。
パイプライン検索ステージの作成
Java ドライバーは、次の演算子のヘルパー メソッドを提供します。
演算子 | 説明 |
|---|---|
不完全な入力 string からの文字シーケンスを含む単語またはフレーズを検索します。 | |
2 つ以上の演算子を 1 つのクエリに結合します。 | |
フィールドが指定した値と一致するかどうかを確認します。 | |
指定されたインデックス付きフィールド名へのパスがドキュメント内に存在するかどうかをテストします。 | |
指定されたパスにあるBSON番号、日付、ブール値、ObjectId、uuid、または string 値の配列を検索し、フィールドの値が指定された配列内の任意の値と等しいドキュメントを返します。 | |
入力ドキュメントに類似するドキュメントを返します。 | |
数値、日付、 GeoJSONポイント値のクエリとスコアリングをサポートします。 | |
インデックス構成で指定されたアナライザを使用して、順序付けられたタームのシーケンスを含むドキュメントを検索します。 | |
インデックス付きフィールドと値の組み合わせのクエリをサポートします。 | |
数値、日付、string 値のクエリとスコアリングをサポートします。 | |
クエリフィールドを 正規式として解釈します。 | |
インデックス構成で指定したアナライザを使用して全文検索を実行します。 | |
検索stringに任意の文字と一致する特殊文字を使用するクエリを有効にします。 |
パイプライン検索ステージの例
注意
Atlas サンプル データセット
この例では、Atlasサンプルデータセットの sample_mflix.moviesコレクションを使用します。無料階層の Atlas クラスターをセットアップし、サンプルデータセットをロードする方法については、Atlas ドキュメントの「 Atlas を使い始める 」チュートリアルを参照してください。
この例を実行する前に、moviesコレクションに次の定義を持つMongoDB検索インデックスを作成する必要があります。
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
MongoDB Search インデックスの作成の詳細については、インデックスガイドのMongoDB Search および Vector Search インデックスのセクションを参照してください。
次のコードでは、次の仕様を持つ $search ステージが作成されます。
genres配列に"Comedy"が含まれていることを確認fullplotフィールドでフレーズ"new york"を検索します1950から2000までのyear値と一致します"Love"というタームで始まるtitle値を検索します
List<Bson> pipeline = new ArrayList<>(); pipeline.add(Aggregates.search( SearchOperator.compound() .filter( List.of( SearchOperator.in(fieldPath("genres"), "Comedy"), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard(fieldPath("title"), "Love *") )))); pipeline.add(Aggregates.project( Projections.include("title", "year", "genres") )); AggregateIterable<Document> results = collection.aggregate(pipeline); results.forEach(doc -> System.out.println(doc.toJson()));
{"_id": ..., "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979} {"_id": ..., "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994}
MongoDB 検索するヘルパーメソッドの詳細については、ドライバー Core API ドキュメントの SearchOperator インターフェース参照を参照してください。
詳細情報
MongoDB 検索する の詳細については、Atlas ドキュメントの MongoDB 検索する を参照してください。
API ドキュメント
このガイドで言及されているメソッドについて詳しくは、次のAPIドキュメントを参照してください。