$text(全文搜索)
最后更新:2026-10-09
$text(全文搜索)
$text 对已建文本索引的字段执行全文搜索。`{ $text: { $search: 'coffee shop' } }`。使用前必须创建 text 索引(db.collection.createIndex({ content: 'text' })),一个集合最多一个 text 索引。支持词干化、停用词过滤、短语搜索(双引号包裹),可用 $meta: 'textScore' 获取相关度得分并排序。
| 分类 | 元素与求值 |
|---|---|
| MongoDB 版本 | 2.6+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $text: { $search: <字符串>, $language: <语言>, $caseSensitive: <布尔> } }
⚙️ 参数
| search | 要搜索的关键词或短语。 |
|---|---|
| language | 可选,指定词干化语言。 |
| caseSensitive | 可选,是否大小写敏感。 |
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $text:全文搜索 coffee shop
// 需先建 text 索引
db.articles.find({ $text: { $search: 'coffee shop' } })
// 按相关度排序(textScore)
db.articles.find(
{ $text: { $search: 'coffee' } },
{ score: { $meta: 'textScore' } }
).sort({ score: { $meta: 'textScore' } })
运行结果:
// 返回包含 coffee 或 shop 词干的文章;第二个示例按相关度降序返回
📌 注意事项
- 必须先建 text 索引,一个集合最多一个
- 词干化:搜索 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' } })。