Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

テキスト検索の実行(自己管理型配置)

注意

このページでは、自己管理型(Atlas以外)デプロイメントのテキスト クエリ機能について説明します。 MongoDB Atlasでホストされているデータに対して、 MongoDB は改良された全文クエリ ソリューションである Atlas Search とベクトル検索ソリューションである Atlas ベクトル検索 を提供します。

自己管理型配置でテキスト検索クエリを実行するには、コレクションにテキスト インデックスが必要です。 MongoDB は、string コンテンツに対するテキスト検索クエリをサポートするために テキストインデックス を提供します。 テキストインデックスには、値が string または複数の string 配列である任意のフィールドを含めることができます。 コレクションに含められるテキスト検索インデックスは1 つだけですが、そのインデックスは複数のフィールドをカバーできます。

動作、トークン化、プロパティを含むテキスト インデックスの詳細な参照については、「自己管理型配置のテキスト インデックス」セクションを参照してください。

この例では、テキストインデックスを作成し、それを使用してテキストフィールドのみを指定してカフェを検索する方法を示します。

次のドキュメントを使用してコレクション storesを作成します。

db.stores.insertMany(
[
{ _id: 1, name: "Java Hut", description: "Coffee and cakes" },
{ _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
{ _id: 3, name: "Coffee Shop", description: "Just coffee" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
{ _id: 5, name: "Java Shopping", description: "Indonesian goods" }
]
)

で次のコマンドを実行して、 フィールドと mongoshフィールドをテキスト検索で許可します。namedescription

db.stores.createIndex( { name: "text", description: "text" } )

二重引用符で囲み、完全に一致するフレーズを検索することもできます。 $search string にフレーズと個々のタームが含まれている場合、テキスト検索ではそのフレーズを含むドキュメントのみが検索されます。

たとえば、次の例では、「ウィンドウ」を含むすべてのドキュメントが検索されます。

db.stores.find( { $text: { $search: "\"coffee shop\"" } } )

詳細については、「フレーズ 」を参照してください。

単語を除外するには、先頭に「 - 」文字を付けます。 たとえば、" Java " または "shot" を含み、かつ "coutine" は含まないすべてのストアを検索するには、次のコマンドを使用します。

db.stores.find( { $text: { $search: "java shop -coffee" } } )

MongoDB は、デフォルトではソートされていない順序で結果を返します。 ただし、 $textクエリでは各ドキュメントに対して関連性スコアを計算し、ドキュメントがクエリにどの程度一致するかを指定します。

関連性スコアの順序で結果を並べ替えるには、 $meta textScoreフィールドを明示的にプロジェクションし、そのフィールドで並べ替える必要があります。

db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

$text は、 集計パイプライン でも利用できます。

戻る

テキスト検索