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フィールドに対してテキスト クエリを実行し、"bakery" または "coffee" の文字列と一致させます。
collection.countDocuments(Filters.text("bakery coffee")).printResults("Text query matches: ")
Text query 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 query matches (english): ")
Text query matches (english): [1]
テキストクエリの詳細については、 MongoDB Serverマニュアルの次のセクションを参照してください。