Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

テキスト検索

項目一覧

  • 前提条件
  • MongoDB 配置への接続
  • テキストインデックスの作成
  • テキスト検索の実行
  • テキストスコア
  • テキスト検索オプションの指定

MongoDB は、ドキュメント内の string コンテンツに対してテキスト検索を実行するクエリ操作をサポートしています。 テキスト検索を実行するために、MongoDB は テキストインデックス と $textクエリ演算子を使用します。 テキスト検索の詳細については、サーバー マニュアルのテキスト検索を参照してください。

ドライバーはテキスト検索クエリフィルターの作成を容易にするためのFilters.text()ヘルパー メソッドを提供します。

このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
import com.mongodb.client.model.TextSearchOptions;
import com.mongodb.client.model.Projections;
import org.bson.Document;

重要

このガイドでは、カスタムSubscriber実装を使用します。これについては、 カスタム サブスクリプション実装ガイドで説明されています。

まず、MongoDB 配置に接続し、 インスタンスと インスタンスをMongoDatabase MongoCollection宣言して定義します。

次のコードは、ポート27017localhostで実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 testデータベースを参照するためのdatabase変数と、 restaurantsコレクションを参照するためのcollection変数を定義します。

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。

テキスト インデックスを作成するには、 Indexes.text()静的ヘルパーを使用してテキスト インデックスの仕様を作成し、その仕様をMongoCollection.createIndex()メソッドに渡してインデックスを作成します。

次の例では、 restaurantsコレクションのnameフィールドにテキスト インデックスを作成しています。

MongoCollection<Document> collection = database.getCollection("restaurants");
collection.createIndex(Indexes.text("name")).subscribe(new PrintToStringSubscriber<String>());

テキスト検索を実行するには、 Filters.text()ヘルパー メソッドを使用してテキスト検索クエリフィルターを指定します。

たとえば、次のコードはnameフィールドでテキスト検索を実行し、string "bakery"または"coffee"と一致させます。

collection
.countDocuments(Filters.text("bakery coffee"))
.subscribe(new PrintSubscriber<Long>("Text search matches: %s"));
Text search matches: [2]

テキスト検索では、一致するドキュメントごとに、指定されたテキスト検索クエリフィルターに対するドキュメントの関連性を表すスコアが割り当てられます。 スコアを返して並べ替えるには、プロジェクション ドキュメントと ソート式で$meta演算子を使用します。

collection.find(Filters.text("bakery cafe"))
.projection(Projections.metaTextScore("score"))
.sort(Sorts.metaTextScore("score"))
.subscribe(new PrintDocumentSubscriber());

Filters.text()ヘルパーはさまざまなテキスト検索オプションを受け入れることができます。 ドライバーは、これらのオプションを指定するためのTextSearchOptionsクラスを提供します。

たとえば、次のテキスト検索では、 "cafe"という単語をテキスト検索する際に、 テキスト検索言語オプションを指定します。

collection.countDocuments(
Filters.text("cafe", new TextSearchOptions().language("english"))
).subscribe(new PrintSubscriber<Long>("Text search matches (english): %s"));
Text search matches (english): [1]

テキスト検索の詳細については、 MongoDB Serverマニュアルの次のセクションを参照してください。

戻る

読み込み設定 (read preference)