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

自己管理型配置の集計パイプラインの $text

項目一覧

  • 制限事項
  • テキストスコア
  • $search Atlas Search のステージ

MongoDB は、 MongoDB Atlas でホストされているデータ向け に全文検索ソリューションである MongoDB Atlas Search を提供しています。MongoDB 配置を自己管理するユーザーは、レガシーテキスト検索機能を利用できます。

集計パイプラインでは、$matchステージで $text クエリ演算子を使用してテキスト検索を実行できます。

一般的な $text 演算子の制限については、演算子の制限を参照してください。

さらに、集計パイプラインでのテキスト検索には次の制限があります。

  • $textを含む$matchステージは、パイプラインの最初のステージである必要があります。

  • $text演算子は ステージ内で 1 回のみ発生できます。

  • $text演算子式は、 $orまたは$not式には使用できません。

  • $textは、デフォルトでは、で一致したドキュメントを一致スコアの順序で返すことはありません。スコアの降順で並べ替えるには、$sort ステージで $meta 集計式を使用します。

$text 演算子は各結果ドキュメントにスコアを割り当てます。スコアは、特定のクエリに対するドキュメントの関連性を表します。スコアは、$sortパイプライン仕様の一部になるだけでなく、プロジェクション式の一部にもなります。{ $meta: "textScore" } 式には $text 操作の処理に関する情報が含まれます。プロジェクションまたはソートのためのスコアへのアクセス方法の詳細については、$meta を参照してください。

メタデータは、 $text操作を含む$matchステージの後にのみ使用できます。

次の例では、フィールド subject にインデックスの付いたコレクション articles を想定しています。

db.articles.createIndex( { subject: "text" } )

次の集計では、$matchステージで用語 cake を検索し、$group ステージで一致するドキュメントの合計 views 数を計算します。

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake" } } },
{ $group: { _id: null, views: { $sum: "$views" } } }
]
)

テキスト検索スコアで並べ替えるには、$sort ステージに {$meta: "textScore"} 式を含めます。次の例では、cake または teaいずれかに一致するものを探し、textScore の降順でソートして、結果セットの title フィールドのみを返します。

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake tea" } } },
{ $sort: { score: { $meta: "textScore" } } },
{ $project: { title: 1, _id: 0 } }
]
)

指定したメタデータによって、並べ替え順序が決まります。たとえば、"textScore" メタデータは降順でソートされます。メタデータの詳細と、メタデータのデフォルトのソート順序を無効にする例については、$meta を参照してください。

"textScore"メタデータは、$text 操作を含む $match ステージに続くプロジェクション、ソート、条件に使用できます。

次の例では、用語 cake または teaいずれかに一致するものを探し、title フィールドと score フィールドをプロジェクションして、 score1.0 より大きいドキュメントのみを返します。

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake tea" } } },
{ $project: { title: 1, _id: 0, score: { $meta: "textScore" } } },
{ $match: { score: { $gt: 1.0 } } }
]
)

次の集計では、$match ステージで用語 saber を含み、用語 claro を含まないドキュメントをスペイン語で検索し、$group ステージで一致するドキュメントの合計 views 数を計算します。

db.articles.aggregate(
[
{ $match: { $text: { $search: "saber -claro", $language: "es" } } },
{ $group: { _id: null, views: { $sum: "$views" } } }
]
)

MongoDB Atlas でホストされているデータの場合、Atlas Search はコレクションの全文検索を実行するための $search 集計ステージを備えています。

戻る

$text