Overview
In this guide, you can learn how to use the Kotlin Sync driver to run MongoDB Search queries on a collection. MongoDB Search enables you to perform full-text searches on collections hosted on MongoDB Atlas. MongoDB Search indexes specify the behavior of the search and which fields to index.
サンプル データ
このガイドの例では、Atlasサンプルデータセット の sample_mflixデータベース内の moviesコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。集計操作とビルダの詳細については、 集計操作ガイド をご覧ください。
MongoDB Search クエリの実行
This section shows how to create an aggregation pipeline to run a MongoDB Search query on a collection. You can use the Aggregates.search() builder method to create a $search pipeline stage, which specifies the search criteria. Then, call the aggregate() method and pass your pipeline as a parameter.
注意
MongoDB v4.2 以降の Atlas でのみ利用可能
This aggregation pipeline operator is only available for collections hosted on MongoDB Atlas clusters running v4.2 or later that are covered by a MongoDB Search index. Learn more about the required setup and the functionality of this operator from the MongoDB Search documentation.
Before running a MongoDB Search query, you must create a MongoDB Search index on your collection. To learn how to programmatically create a MongoDB Search index, see the Create a Search Index section in the Indexes guide.
MongoDB Search の例
この例では、次のアクションを実行してMongoDB Search クエリを実行します。
Aggregates.search()ビルダ メソッドを使用して$searchステージを構築し、ドライバーにtitleフィールドに"Alabama"という単語が含まれているドキュメントをクエリするよう指示します。Aggregates.project()ビルダ メソッドを使用して$projectステージを構築し、クエリ結果にtitleフィールドを含めるようにドライバーに指示しますパイプラインのステージを
aggregate()メソッドに渡し、結果を出力します。
val pipeline: List<Bson> = listOf( search(SearchOperator.text( fieldPath("title"), "Alabama")), project(Projections.include("title")) ) val results = collection.aggregate(pipeline) results.forEach { doc -> println(doc.toJson()) }
{"_id": {"$oid": "..."}, "title": "Alabama Moon"} {"_id": {"$oid": "..."}, "title": "Crazy in Alabama"} {"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}
MongoDB Search Metadata
searchMeta() メソッドを使用して $searchMeta パイプラインステージを作成します。このステージは Atlas の全文検索結果のメタデータのみを返します。
The following example shows the near metadata for a MongoDB Search aggregation stage:
searchMeta( SearchOperator.near(2010, 1, fieldPath("year")) )
パイプライン検索ステージの作成
Kotlin Syncドライバーは次の演算子のヘルパーメソッドを提供します。
演算子 | 説明 |
|---|---|
不完全な入力 string からの文字シーケンスを含む単語またはフレーズを検索します。 | |
2 つ以上の演算子を 1 つのクエリに結合します。 | |
フィールドが指定した値と一致するかどうかを確認します。 | |
指定されたインデックス付きフィールド名へのパスがドキュメント内に存在するかどうかをテストします。 | |
指定されたパスにあるBSON番号、日付、ブール値、ObjectId、uuid、または string 値の配列を検索し、フィールドの値が指定された配列内の任意の値と等しいドキュメントを返します。 | |
入力ドキュメントに類似するドキュメントを返します。 | |
数値、日付、 GeoJSONポイント値のクエリとスコアリングをサポートします。 | |
インデックス構成で指定されたアナライザを使用して、順序付けられたタームのシーケンスを含むドキュメントを検索します。 | |
インデックス付きフィールドと値の組み合わせのクエリをサポートします。 | |
数値、日付、string 値のクエリとスコアリングをサポートします。 | |
クエリフィールドを 正規式として解釈します。 | |
インデックス構成で指定したアナライザを使用して全文検索を実行します。 | |
検索stringに任意の文字と一致する特殊文字を使用するクエリを有効にします。 |
パイプライン検索ステージの例
注意
Atlas サンプル データセット
この例では、Atlasサンプルデータセットの sample_mflix.moviesコレクションを使用します。無料階層の Atlas クラスターをセットアップし、サンプルデータセットをロードする方法については、Atlas ドキュメントの「 Atlas を使い始める 」チュートリアルを参照してください。
この例を実行する前に、moviesコレクションに次の定義を持つMongoDB Searchインデックスを作成する必要があります。
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
MongoDB Search インデックスの作成の詳細については、 インデックスガイドの「 検索インデックスの作成 」セクションを参照してください。
次のコードでは、次の仕様を持つ $search ステージが作成されます。
genres配列に"Comedy"が含まれていることを確認fullplotフィールドでフレーズ"new york"を検索します1950から2000までのyear値と一致します"Love"というタームで始まるtitle値を検索します
val searchStage = Aggregates.search( SearchOperator.compound() .filter( listOf( SearchOperator.`in`(fieldPath("genres"), listOf("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard(fieldPath("title"), "Love *") ) ) ) val projectStage = Aggregates.project( Projections.include("title", "year", "genres")) val pipeline = listOf(searchStage, projectStage) val results = collection.aggregate(pipeline) results.forEach { result -> println(result) }
{"_id": ..., "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979} {"_id": ..., "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994}
MongoDB Searchヘルパーメソッドの詳細については、ドライバー コアAPIドキュメントの SearchOperator インターフェース参照を参照してください。
詳細情報
MongoDB Search の詳細については、Atlas ドキュメントの「 MongoDB Search 」を参照してください。
API ドキュメント
このガイドで言及されているメソッドについて詳しくは、次のAPIドキュメントを参照してください。