Skip to content

MongoDB 全文检索

创建文本索引

一个集合最多一个文本索引,可包含多个字符串字段:

javascript
db.articles.createIndex(
  { title: "text", content: "text" },
  { weights: { title: 10, content: 5 }, name: "text_idx" }
)

weights 为字段设置权重,影响相关性得分;未指定则默认 1。

$text 查询

javascript
db.articles.find({ $text: { $search: "MongoDB 教程" } })
  • $search:空格分隔多个词,默认是“或”关系;若要短语搜索,用双引号 "MongoDB 教程"
  • 可配合 $language 指定语言(影响分词与停用词)。

按相关性排序

javascript
db.articles.find(
  { $text: { $search: "MongoDB" } },
  { score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } })

限制

  • 文本索引会忽略语言停用词,且分词依赖语言。
  • 适合中等规模全文检索;大规模或复杂需求可考虑 Atlas SearchElasticsearch 等。

下一节介绍 MongoDB 正则表达式