rmdir.cn

全文搜索 ($text)

$text 文本索引全文搜索

语法

db.collection.find({ $text: { $search: "<keywords>" } }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } })

说明

$text 操作符用于对文本索引执行全文搜索。先创建 text 类型索引,然后使用 $search 关键词、$language 语言选项和 $caseSensitive 等参数进行搜索。支持文本评分 ($meta: "textScore") 排序。

参数

  • $search必填

    搜索关键词,空格分隔多词为 OR 逻辑,引号短语精确匹配,-排除

  • $language

    分词语言,如 "zh"(中文)、"en"(英文)、"none"(不分词)

  • $caseSensitive

    是否区分大小写,默认 false

  • $diacriticSensitive

    是否区分变音符号,默认 false

示例

创建文本索引

对标题和内容建全文索引

db.articles.createIndex({ title: "text", content: "text" })

基本搜索

搜索包含 mongodb 的文档

db.articles.find({ $text: { $search: "mongodb" } })

短语搜索

精确搜索完整短语

db.articles.find({ $text: { $search: "\"replica set\"" } })

相关度排序

按文本匹配得分排序

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

排除关键词

搜索包含 mongodb 但不含 atlas 的文档

db.articles.find({ $text: { $search: "mongodb -atlas" } })