文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
全文索引
准备数据:
db.info.insert({contextInfo:"I am a student. I love learning. I am good at playing basketball and football. I love my family, I love my parents."})
db.info.insert({contextInfo:"I am a research and development engineer. I love working and studying. I love my family, I love my parents."})
建立全文索引
db.info.ensureIndex({contextInfo:'text'})
需要注意的是:这里使用 text
关键词来代表全文索引,就不建立数据模型了。
全文索引查找
建立好了全文索引,就可以查找了,查找时需要两个关键修饰符:
- $text:表示要在全文索引中查东西
- $search:后边跟查找的内容
> db.info.find({$text:{$search:"student"}})
{ "_id" : ObjectId("5cbb3105466a2bd461ae0f42"), "contextInfo" : "I am a student. I love learning. I am good at playing basketball and football. I love my family, I love my parents." }
查找多个词
全文索引支持多个词语查找,比如我们希望查找数据中有 student engineer learning
的数据(这是或的关系),所以两条数据都会出现。
> db.info.find({$text:{$search:"student engineer learning"}})
{ "_id" : ObjectId("5cbb3107466a2bd461ae0f43"), "contextInfo" : "I am a research and development engineer. I love working and studying. I love my family, I love my parents." }
{ "_id" : ObjectId("5cbb3105466a2bd461ae0f42"), "contextInfo" : "I am a student. I love learning. I am good at playing basketball and football. I love my family, I love my parents." }
如果我们这时候希望不查找出来有 learning
这个单词的记录,我们可以使用 -
减号来取消。
db.info.find({$text:{$search:"student engineer -learning"}})
转义符:全文索引中是支持转义符的,比如我们想搜索的是两个词(love learning 和 development),这时候需要使用
\
斜杠来转义。
> db.info.find({$text:{$search:"\'love learning\' development"}})
{ "_id" : ObjectId("5cbb3107466a2bd461ae0f43"), "contextInfo" : "I am a research and development engineer. I love working and studying. I love my family, I love my parents." }
{ "_id" : ObjectId("5cbb3105466a2bd461ae0f42"), "contextInfo" : "I am a student. I love learning. I am good at playing basketball and football. I love my family, I love my parents." }
总结:全文索引在工作还是经常使用的,比如博客文章的搜索,长文件的关键词搜索,这些都需要使用全文索引来进行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论