MongoDB は、ドキュメント内の string コンテンツに対してテキスト検索を実行するクエリ操作をサポートしています。テキスト検索を実行するために、 MongoDB はテキストインデックスと $text クエリクエリ演算子を使用します。テキスト検索の詳細については、サーバー マニュアルの テキスト検索 を参照してください。
ドライバーはテキスト検索クエリフィルターの作成を容易にするためのFilters.text()ヘルパー メソッドを提供します。
前提条件
このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。
test.restaurantsドキュメントrestaurants.jsonアセットGithubの ファイルのドキュメントが入力された コレクション。次のインポート ステートメントは次のとおりです。
import org.mongodb.scala._ import org.mongodb.scala.model._ 
注意
このガイドでは、 クイック スタート プライマリで説明されているObservable暗黙を使用します。
MongoDB 配置への接続
まず、MongoDB 配置に接続し、 インスタンスとMongoDatabase MongoCollectionインスタンスを 宣言して定義します。
次のコードは、ポート27017のlocalhostで実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 testデータベースを参照するためのdatabase変数と、 restaurantsコレクションを参照するためのcollection変数を定義します。
val mongoClient: MongoClient = MongoClient() val database: MongoDatabase = mongoClient.getDatabase("test") val collection: MongoCollection[Document] = database.getCollection("restaurants") 
MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。
テキストインデックスの作成
テキスト インデックスを作成するには、 Indexes.text()静的ヘルパーを使用してテキスト インデックスの仕様を作成し、その仕様をMongoCollection.createIndex()メソッドに渡してインデックスを作成します。
次の例では、 コレクション内のドキュメントのnameフィールドにテキスト インデックスを作成しています。
collection.createIndex(Indexes.text("name")).printResults() 
テキスト検索の実行
テキスト検索を実行するには、 Filters.text()ヘルパー メソッドを使用してテキスト検索クエリフィルターを指定します。
たとえば、次のコードはnameフィールドでテキスト検索を実行し、string "bakery"または"coffee"と一致させます。
collection.countDocuments(Filters.text("bakery coffee")).printResults("Text search matches: ") 
Text search matches: [2] 
テキストスコア
テキスト検索では、一致するドキュメントごとに、指定されたテキスト検索クエリフィルターに対するドキュメントの関連性を表すスコアが割り当てられます。 スコアを返して並べ替えるには、プロジェクション ドキュメントと ソート式で$meta演算子を使用します。
collection.find(Filters.text("bakery cafe"))                        .projection(Projections.metaTextScore("score"))                        .sort(Sorts.metaTextScore("score"))                        .printResults() 
テキスト検索オプションの指定
Filters.text()ヘルパーはさまざまなテキスト検索オプションを受け入れることができます。 ドライバーは、これらのオプションを指定するためのTextSearchOptionsクラスを提供します。
たとえば、次のテキスト検索では、 "cafe"という単語をテキスト検索する際に、 テキスト検索言語オプションを指定します。
collection.countDocuments(Filters.text("cafe", TextSearchOptions().language("english")))                                  .printResults("Text search matches (english): ") 
Text search matches (english): [1] 
テキスト検索の詳細については、 MongoDB Serverマニュアルの次のセクションを参照してください。