AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

MongoDB Search

このガイドでは、Java Reactive Streams ドライバーを使用してコレクションで MongoDB Search クエリを実行する方法を学べることができます。MongoDB Search を使用すると、MongoDB コレクションに対して全文検索を実行できます。MongoDB Search インデックスは、検索の動作とインデックスを作成するフィールドを指定します。

このガイドの例では、Atlas サンプルデータセットの sample_mflix データベースの movies コレクションを使用します。無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。集計操作とビルダの詳細については、「集計フレームワーク」ガイドを参照してください。

このセクションでは、コレクションに対してMongoDB 検索クエリを実行するための集計パイプラインを作成する方法について説明します。Aggregates.search() ビルダ メソッドを使用して、検索条件を指定する $searchパイプラインステージを作成できます。次に、aggregate() メソッドを呼び出し、パイプラインをパラメーターとして渡します。

注意

Atlas および Community Edition のバージョン要件

$search 集計パイプライン演算子は、 MongoDB v4.2 以降を実行中MongoDB Atlasクラスター、またはMongoDB v8.2 以降を実行中MongoDB Community Editionクラスターでホストされているコレクションでのみ使用できます。コレクションはMongoDB 検索インデックスでカバーされている必要があります。必要な設定とこの演算子の機能の詳細については、MongoDB 検索するのドキュメントを参照してください。

MongoDB Search クエリを実行する前に、コレクションに MongoDB Search インデックスを作成する必要があります。MongoDB Search インデックスをプログラムで作成する方法については、インデックスガイドの「MongoDB Search インデックスマネジメント」セクションを参照してください。

この例では、次のアクションを実行してMongoDB 検索クエリを実行します。

  • Aggregates.search() ビルダ メソッドを使用して $search ステージを構築し、ドライバーに title フィールドに "Alabama" という単語が含まれているドキュメントをクエリするよう指示します。$search ステージで使用できる演算子の詳細については、このガイドの パイプライン検索ステージの作成 セクションを参照してください。

  • Aggregates.project()ビルダ メソッドを使用して $project ステージを構築し、クエリ結果に titleフィールドを含めるようにドライバーに指示します

  • パイプラインのステージをaggregate()メソッドに渡し、結果を出力します。

Publisher<Document> publisher = collection.aggregate( List.of( Aggregates.search(SearchOperator.text( SearchPath.fieldPath("title"), "Alabama")), Aggregates.project(Projections.include("title")) ));Flux.from(publisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();

Aggregates.searchMeta() メソッドを使用して $searchMeta パイプラインステージを作成し、MongoDB Search 結果のメタデータのみを返します。

注意

Atlas および Community Edition のバージョン要件

この集計パイプライン演算子は、MongoDB Atlasクラスターでv4.4.11 以降を実行中、またはMongoDB Community EditionクラスターでMongoDB v8.2 以降を実行中のみ使用できます。利用可能なバージョンの詳細なリストについては、$searchMeta に関するMongoDB Atlas のドキュメント を参照してください。

次の例は、MongoDB Search 集計ステージのnearメタデータを示しています。これは、2010から1年以内にyearフィールド値を持つドキュメントの数を返します。

Aggregates.searchMeta( SearchOperator.near(2010, 1, fieldPath("year")));

このヘルパーメソッドの詳細については、 searchMeta() APIドキュメント を参照してください。

Java Reactive Streams ドライバーは、次の演算子のヘルパーメソッドを提供します。

演算子
説明

不完全な入力 string からの文字シーケンスを含む単語またはフレーズを検索します。

2 つ以上の演算子を 1 つのクエリに結合します。

フィールドが指定した値と一致するかどうかを確認します。equals() メソッドと equalsNull() メソッドにマップされます。

指定されたインデックス付きフィールド名へのパスがドキュメント内に存在するかどうかをテストします。

指定されたパスにあるBSON番号、日付、ブール値、ObjectId、uuid、または string 値の配列を検索し、フィールドの値が指定された配列内の任意の値と等しいドキュメントを返します。

入力ドキュメントに類似するドキュメントを返します。

数値、日付、 GeoJSONポイント値のクエリとスコアリングをサポートします。

インデックス構成で指定されたアナライザを使用して、順序付けられたタームのシーケンスを含むドキュメントを検索します。

インデックス付きフィールドと値の組み合わせのクエリをサポートします。

数値、日付、string 値のクエリとスコアリングをサポートします。numberRange() メソッドと dateRange() メソッドにマップされます。

クエリフィールドを 正規式として解釈します。

インデックス構成で指定したアナライザを使用して全文検索を実行します。

検索stringに任意の文字と一致する特殊文字を使用するクエリを有効にします。

この例を実行する前に、moviesコレクションに次の定義を持つMongoDB検索インデックスを作成する必要があります。

{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } }}

MongoDB 検索インデックスの作成の詳細については、「インデックスガイド」の「MongoDB 検索インデックス マネジメント」セクションを参照してください。

次のコードでは、次の仕様を持つ $search ステージが作成されます。

  • genres 配列に "Comedy" が含まれていることを確認

  • fullplotフィールドでフレーズ "new york" を検索します

  • 1950 から 2000 までの year 値と一致します

  • "Love" というタームで始まる title 値を検索します

List<Bson> pipeline = List.of( Aggregates.search( SearchOperator.compound() .filter( List.of( SearchOperator.in(fieldPath("genres"), List.of("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard(fieldPath("title"), "Love *") ))), Aggregates.project( Projections.include("title", "year", "genres") )); Publisher<Document> publisher = collection.aggregate(pipeline);Flux.from(publisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();

MongoDB 検索するヘルパーメソッドの詳細については、ドライバー Core API ドキュメントの SearchOperator インターフェース参照を参照してください。

MongoDB 検索する の詳細については、Atlas ドキュメントの MongoDB 検索する を参照してください。

このガイドで言及されているメソッドについて詳しくは、次のAPIドキュメントを参照してください。