$text (全文検索)
最終更新:2026-10-09
$text (全文検索)
$text は、テキストインデックスが付与されたフィールドに対して全文検索を実行します。`{ $text: { $search: 'coffee shop' } }` のように使います。先にテキストインデックスを作成する必要があります(db.collection.createIndex({ content: 'text' }))。コレクションごとに最大 1 つです。ステミングとストップワード除去を適用し、二重引用符でフレーズ検索ができ、$meta: 'textScore' で関連度スコアを取得できます。
| カテゴリ | 要素と評価 |
|---|---|
| MongoDB バージョン | 2.6+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $text: { $search: <string>, $language: <language>, $caseSensitive: <boolean> } }
⚙️ パラメータ
| search | 検索するキーワードまたはフレーズ。 |
|---|---|
| language | 任意。ステミング用の言語。 |
| caseSensitive | 任意。検索で大文字小文字を区別するかどうか。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $text: coffee shop の全文検索
// 先にテキストインデックスが必要
db.articles.find({ $text: { $search: 'coffee shop' } })
// 関連度(textScore)で並べ替え
db.articles.find(
{ $text: { $search: 'coffee' } },
{ score: { $meta: 'textScore' } }
).sort({ score: { $meta: 'textScore' } })
出力:
// coffee/shop のステムに一致する記事を返す。2 つ目のクエリは関連度順に並べる
📌 注意事項
- 先にテキストインデックスを作成する。コレクションごとに最大 1 つ
- ステミング: coffee で検索すると coffees にも一致する
- $regex と違い、$text はテキストインデックスを使い、大規模テキストに適する
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$text を使う前に何をすべきですか?
A先にテキストインデックスを作成します: db.coll.createIndex({ content: 'text' })。
Q$text と $regex の違いは?
A$text はステミングとスコアリングを持つインデックス型の単語検索です。$regex はパターンマッチで、通常はフルスキャンになります。
Q$text の結果を関連度順に並べるには?
A$meta: 'textScore' でスコアを射影し、sort({ score: { $meta: 'textScore' } }) で並べ替えます。