MongoDB 全文检索学习笔记
什么是全文检索?
全文检索(Full-text Search)是一种关键词搜索方式,可以在一个或多个文本字段中查找包含关键词的文档。与传统的基于关键词匹配的搜索方式相比,全文检索可以更加准确地找到相关的文档。
MongoDB 中的全文检索
MongoDB 提供了全文检索功能,可以在集合中的一个或多个文本字段上执行文本搜索。全文检索使用文本索引来实现,文本索引存储了文档中的所有单词及其在文档中的位置信息,以便进行有效的搜索。
创建文本索引
要在集合中启用全文检索,需要创建一个文本索引。可以使用 db.collection.createIndex()
方法来创建文本索引。
例如,以下命令将在 users
集合的 name
字段上创建文本索引:
Copy Codedb.users.createIndex({ name: "text" })
可以同时在多个字段上创建文本索引,例如:
Copy Codedb.users.createIndex({ name: "text", address: "text" })
执行全文检索
创建了文本索引后,就可以在集合中执行全文检索了。可以使用 $text
查询操作符来执行全文检索查询。
以下命令将在 users
集合中查找包含关键词 "John"
的文档:
Copy Codedb.users.find({ $text: { $search: "John" }})
举例说明
假设有一个 articles
集合,其中包含了多篇文章的标题和正文内容。以下是一个示例文档:
Copy Code{
"_id": ObjectId("60b7a19ea71c2d4138375e69"),
"title": "MongoDB 全文检索",
"content": "MongoDB 是一款文档型数据库...",
"published_at": ISODate("2023-05-01T08:00:00Z")
}
现在我们想要查找包含关键词 "MongoDB"
的文章,可以使用以下命令进行查询:
Copy Codedb.articles.find({ $text: { $search: "MongoDB" }})
这会返回所有标题或正文中包含关键词 "MongoDB"
的文章。如果只想查找标题中包含关键词的文章,可以指定要搜索的字段:
Copy Codedb.articles.find({ $text: { $search: "MongoDB", $diacriticSensitive: true }, }, { score: { $meta: "textScore" } })
其中 $diacriticSensitive
参数用于区分大小写和重音符号,score
字段用于返回匹配度得分。