Overview
このガイドでは、 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インスタンスに連結できるメソッドを説明します。
方式 | 説明 |
|---|---|
| テキスト クエリが大文字と小文字を区別するかどうかを設定します。デフォルトは |
| テキストクエリが発音区別符号を区別するかどうかを設定します。デフォルトは |
|
|
次の例では、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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。