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

MongoDB Search クエリの実行

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

Scalaドライバーを使用してMongoDB Search インデックスを作成および管理する方法については、「 MongoDB Search とMongoDB ベクトル検索インデックスのガイド 」を参照してください。

このガイドの例では、Atlasサンプルデータセットsample_mflixデータベースにあるmoviesコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、Atlas を使い始める を参照してください。

注意

MongoDB Search は、次の配置で利用できます。

  • MongoDB Atlas v4.2 以降

  • MongoDB Community Edition v8.2 以降

MongoDB Search クエリを実行するには、コレクションにMongoDB Searchインデックスが 必要です 。 MongoDB Searchインデックスの作成方法については、「 MongoDB Search とMongoDB ベクトル検索インデックスのガイド 」を参照してください。

全文検索を実行するには、$searchパイプラインステージで aggregate() メソッドを呼び出します。 Scalaドライバーは、このステージを作成するための Aggregates.search()ヘルパーメソッドを提供します。 search() メソッドには次の引数が必要です。

  • SearchOperator 検索するフィールドとテキストを指定するインスタンス

  • SearchOptions インスタンス。使用するMongoDB Searchインデックスの名前など、検索をカスタマイズするためのオプションを指定します

次の例では、 titleフィールドでテキスト "Alabama" を検索し、デフォルトで含まれる _idフィールドと、一致するドキュメントの titleフィールドのみをプロジェクションします。

val operator = SearchOperator.text(
SearchPath.fieldPath("title"), "Alabama")
val options = searchOptions().index("<search index name>")
val pipeline = Seq(
Aggregates.search(operator, options),
Aggregates.project(Projections.include("title"))
)
try {
Await
.result(collection.aggregate(pipeline).toFuture(), 20.seconds)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"_id": {"$oid": "..."}, "title": "Alabama Moon"}
{"_id": {"$oid": "..."}, "title": "Crazy in Alabama"}
{"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}

Tip

Atlas ドキュメントのMongoDB Search チュートリアルを表示するには、「 Atlas Search クエリの実行 」を参照してください。

注意

MongoDB Searchメタデータは、次の配置で利用できます。

  • MongoDB Atlas v4.4.11 以降

  • MongoDB Community Edition v8.2 以降

MongoDB Search クエリからメタデータのみを検索結果を返さずに検索するには、Aggregates.searchMeta()ヘルパーメソッドを使用します。次の例では、yearフィールドで 2010 の近くの値を検索するクエリのメタデータを返します。

try {
Await
.result(
collection.aggregate(Seq(
Aggregates.searchMeta(
SearchOperator.near(2010, 1, SearchPath.fieldPath("year")))
)).toFuture(),
20.seconds
)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"count": {"lowerBound": 35}}

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

演算子
説明

不完全な入力 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 Search インデックスの作成の詳細については、「 MongoDB Search およびMongoDB ベクトル検索インデックスのガイド 」を参照してください。

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

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

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

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

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

val searchStage = Aggregates.search(
SearchOperator.compound()
.must(
Iterable(
SearchOperator.in(fieldPath("genres"), List("Comedy")),
SearchOperator.phrase(fieldPath("fullplot"), "new york"),
SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000),
SearchOperator.wildcard("Love *", fieldPath("title")),
).asJava
)
)
val projectStage = Aggregates.project(
Projections.include("title", "year", "genres"))
try {
Await
.result(
collection.aggregate(Seq(searchStage, projectStage)).toFuture(),
20.seconds
)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"_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 Search の詳細については、Atlas ドキュメントの「 MongoDB Search の概要 」を参照してください。

このガイドで説明するメソッドとタイプの詳細については、次の API ドキュメントを参照してください。