Atlas Search
項目一覧
Overview
このガイドでは、 Javaドライバーを使用してコレクションに対して Atlas Search クエリを実行する方法を説明します。 Atlas Search を使用すると、 MongoDB Atlasでホストされているコレクションに対して全文検索を実行できます。 Atlas Search インデックスは、検索の動作とインデックスするフィールド を指定します。
サンプル データ
このガイドの例では、Atlasサンプルデータセット の movies
データベース内のsample_mflix
コレクションを使用します。 MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。集計操作とビルダの詳細については、 集計ガイドをご覧ください。
Atlas Search クエリの実行
このセクションでは、コレクションに対して Atlas Search クエリを実行するための集計パイプラインを作成する方法について説明します。 Aggregates.search()
ビルダー メソッドを使用して、検索条件を指定する $search
パイプラインステージを作成できます。次に、aggregate()
メソッドを呼び出し、パイプラインをパラメーターとして渡します。
注意
MongoDB v4.2 以降の Atlas でのみ利用可能
この集計パイプライン演算子は、 インデックス によってカバーされているMongoDB Atlas v4.2 以降を実行しているAtlas Search クラスターでホストされているコレクションでのみ使用できます。必要な設定とこの演算子の機能の詳細については、 Atlas Searchのドキュメントを参照してください。
Atlas Search クエリを実行中前に、コレクションに Atlas Searchインデックスを作成する必要があります。プログラムによって Atlas Searchインデックスを作成する方法については、 インデックスガイドの「Atlas Search とベクトル検索インデックス」セクションを参照してください。
Atlas Search の例
この例では、次のアクションを実行して Atlas Search クエリを実行します。
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ドライバー Atlas Search の例
Javaドライバーを使用して Atlas Search クエリを実行するその他の例については、Atlas ドキュメントの Atlas Search チュートリアル を参照してください。
Atlas Search メタデータ
searchMeta()
メソッドを使用して $searchMeta パイプラインステージを作成します。このステージは Atlas の全文検索結果のメタデータのみを返します。
Tip
MongoDB v4.4.11 以降の Atlas でのみ利用可能
この集計パイプライン演算子は、v 以降を実行中MongoDB Atlasクラスターでのみ使用できます。利用可能なバージョンの詳細なリストについては、 4.4.11$searchMeta に関するMongoDB Atlas のドキュメント を参照してください。
次の例では、Atlas 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 を使い始める 」チュートリアルを参照してください。
この例を実行する前に、次の定義を持つ Atlas Searchインデックスを movies
コレクションに作成する必要があります。
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
Atlas Search インデックスの作成の詳細については、「 インデックスガイド 」の「 Atlas 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}
Atlas Searchヘルパーメソッドの詳細については、ドライバー コアAPIドキュメントの SearchOperator インターフェース参照を参照してください。
詳細情報
Atlas Search の詳細については、Atlas ドキュメントの「 Atlas Search 」を参照してください。
API ドキュメント
このガイドで言及されているメソッドについて詳しくは、次のAPIドキュメントを参照してください。