MongoDB(课时24 全文索引)
3.6.3 全文索引
在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是利用了某个字段上实现的模糊查询,但这个时候返回的信息并不会很准确,因为只能够查A字段或B字段,而在MongoDB里面实现了非常简单的全文检索。
范例:定义一个新的集合
db.news.insert({"title" : "wangke", "content" : "lol"})
db.news.insert({"title" : "wangyan", "content" : "heshui"})
db.news.insert({"title" : "wangying", "content" : "cf"})
db.news.insert({"title" : "wangyanjun", "content" : "shuijiao"})
db.news.insert({"title" : "wangyan wangying", "content" : "heshui"})
范例:设置全文检索
db.news.ensureIndex({"title" : "text", "content" : "text"})
范例:实现数据的模糊查询
如果想表示出全文检索,则使用"search"运算符:
查询指定关键字:{"$search" : "查询关键字"}
查询多个关键字(或关系):{"$search" : "查询关键字 查询关键字 ......"}
查询多个关键字(与关系):{"$search" : "\"查询关键字\" \"查询关键字\" ......"} # \"转义字符
排除多个关键字(排除某一个):{"$search" : "\"查询关键字\" \"查询关键字\"...... - 排除关键字"}
范例:查询单个内容(全文检索)
db.news.find({"$text" : {"$search" : "wangke"}})
范例:包含有"wangke"或"wangyanjun"的信息
db.news.find({"$text" : {"$search" : "wangke wangyanjun"}})
范例: 同时包含有“wangyan wagnying”的信息
db.news.find({"$text" : {"$search" : "\"wangyan\" \"wangying\""}})
范例:包含有"wangyan","wangying"没有"wangke"的信息
db.news.find({"$text" : {"$search" : "\"wangyan\" \"wangying\" - wangke"}})
在进行全文检索操作的时候还可以使用相似度的打分来判断检索成果。
范例:为结果打分
db.news.find({"$text" : {"$search" : "wangyan"}}, {"score" : {"$meta" : "textScore"}})
分数越高表示越接近最完美的查询结果,打分操作可以使用户更好地区分查询准确度。
db.news.find({"$text" : {"$search" : "wangyan"}}, {"score" : {"$meta" : "textScore"}}).sort({"score" : {"$meta" : "textScore"}})
按照打分的成绩进行排列,实际上就可以实现更加准确的信息搜索。
但是在这里还有一个小问题,如果一个集合的字段太多,那么每一个字段都分别设置全文检索比较麻烦,这种情况可以为所有的字段设置全文检索。
范例:为所有字段设置全文检索
先将前面的索引删除:
db.news.ensureIndex({"$**" : "text"})
这是一种最简单的设置全文索引的方式,但是尽可能别用,一个字:慢。(索引越多,操作越慢)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)