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

テキストクエリの実行

このガイドでは、 Scalaドライバーを使用してドキュメントに対してテキスト クエリを実行する方法を学習できます。

テキストクエリを使用して、指定されたフィールドにタームまたはフレーズを含むドキュメントを検索できます。タームには空白以外の文字のみが含まれます。フレーズには、任意の数の空白文字で区切られたタームが含まれます。

注意

テキストクエリでは、検索するコレクションフィールドにテキストインデックスが必要です。インデックスの作成方法については、「 インデックスを使用したクエリの最適化 」ガイドを参照してください。

moviessample_mflixこのガイドの例では、Atlasサンプルデータセットの データベースの コレクションを使用します。 Scalaアプリケーションからこのコレクションにアクセスするには、AtlasMongoClient クラスターに接続する を作成します。次に、 変数と 変数に次の値を割り当てます。databasecollection

val database: MongoDatabase = mongoClient.getDatabase("sample_mflix")
val collection: MongoCollection[Document] =
database.getCollection("movies")

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、MongoDBを使い始めるガイドを参照してください。

テキストクエリを実行する前に、コレクションに テキストインデックスを作成する必要があります。テキストインデックスは、テキスト検索用のインデックスを作成する 1 つ以上の文字列フィールドを指定します。次の例では、moviesコレクションの titleフィールドにテキストインデックスを作成します。

val observable = collection.createIndex(Indexes.text("title"))
Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))

特定のタームを含むドキュメントを検索するには、タームを string として Filtersクラスの text() メソッドに渡します。

次の例では、titleフィールドでターム"time" が含まれるドキュメントをカウントします。

val filterTerm = text("time")
collection.countDocuments(filterTerm)
.subscribe((count: Long) => println(count))
146

複数のタームを含むドキュメントを検索するには、検索文字列内でタームをスペースで区切ります。次の例では、titleフィールドでターム"time" またはターム"machine" を持つドキュメントをカウントします。

val filterMultiple = text("time machine")
collection.countDocuments(filterMultiple)
.subscribe((count: Long) => println(count))
158

フレーズを含むドキュメントを検索するには、検索文字列内でエスケープされた引用符(\")で囲みます。

次の例では、titleフィールドにフレーズ "time machine" が含まれるドキュメントをカウントします。

val filterPhrase = text("\"time machine\"")
collection.countDocuments(filterPhrase)
.subscribe((count: Long) => println(count))
4

特定のタームを含むドキュメントを除外するには、検索文字列のタームの前にハイフン(-)を付けます。クエリには少なくとも 1 つの正のタームを含める必要があります。

次の例では、 "time" というタームを含むが "machine" というタームは含まないドキュメントをカウントします。

val filterExclude = text("time -machine")
collection.countDocuments(filterExclude)
.subscribe((count: Long) => println(count))
142

テキスト クエリの動作をカスタマイズするには、TextSearchOptionsオブジェクトを 2 番目のパラメータとして Filters.text() に渡します。次の表では、TextSearchOptionsインスタンスに連結できるメソッドを説明します。

方式
説明

caseSensitive()

テキスト クエリが大文字と小文字を区別するかどうかを設定します。デフォルトはfalse
です。パラメータ型:Boolean

diacriticSensitive()

テキストクエリが発音区別符号を区別するかどうかを設定します。デフォルトはfalse
です。パラメータ型:Boolean

language()

default_languageテキストクエリの言語を設定します。デフォルトは テキストインデックスの です。言語が設定されていない場合、デフォルトは"english"
です。パラメータ型:String

次の例では、titleフィールドで大文字とターム"Time" を検索するのに一致するドキュメントをカウントします。

val options = TextSearchOptions().caseSensitive(true)
val filterOptions = text("Time", options)
collection.countDocuments(filterOptions)
.subscribe((count: Long) => println(count))
146

テキスト検索の詳細については、 MongoDB Serverマニュアルの次のリソースを参照してください。

Scalaドライバーを使用してインデックスを作成する方法について詳しくは、「 インデックスを使用してクエリを最適化する 」ガイドを参照してください。

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