自己管理型配置の集計パイプラインの $text
MongoDB は、 MongoDB Atlas でホストされているデータに対して、 プレミアムの全文検索ソリューションである MongoDB Atlas Search を提供します。MongoDB 配置を自己管理するユーザーは、レガシーテキスト検索機能を利用できます。
集計パイプラインでは、$match
ステージで $text
クエリ演算子を使用してテキスト検索を実行できます。
制限事項
一般的な $text
演算子の制限については、演算子の制限を参照してください。
さらに、集計パイプラインでのテキスト検索には次の制限があります。
テキストスコア
$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
フィールドをプロジェクションして、 score
が 1.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" } } } ] )
$search
Atlas Search のステージ
MongoDB Atlas でホストされているデータの場合、Atlas Search はコレクションの全文検索を実行するための $search 集計ステージを備えています。