MongoDB的全文检索

一、全文检索
准备查询数据

对name字段建立全文索引,如果字段选择了$**,即表示全部字段

1.查询name为zhangsan的数据

2.查询name为zhangsan或lisi的数据,空格表示或关系
db.getCollection("mycol").find({$text:{$search:"zhangsan lisi"}})

3.查询name为zhangsan,排除lisi的数据,横杠表示非关系
db.getCollection("mycol").find({$text:{$search:"zhangsan -lisi"}})

4.查询name为zhangsan且name为one的数据,转义字符表示引号,如果字符加了引号即表示且关系
db.getCollection("mycol").find({$text:{$search:"\"zhangsan\" \"one\""}})

二、存在的问题及注意点?

同样为name创建全文检索。
查询db.getCollection("ppcol").find({$text:{$search:"is"}})返回结果为空。

原因:is是停止词,在英语里面会遇到很多a,the,or等使用频率很高的字或词,常为冠词、介词、副词或连词等。如果搜索引擎要将这些词都索引的话,那么几乎每个网站都会被索引,也就是说工作量巨大。可以毫不夸张的说句,只要是个英文网站都会用到a或者是the。那么这些英文的词跟我们中文有什么关系呢? 在中文网站里面其实也存在大量的stopword,我们称它为停止词。比如我们前面这句话,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。

对于中文的全文检索不是很友好

上述运行结果:检索张返回空,搜索李返回数据。
说明MongoDB中文全文索引建立方式与英文几乎相同,都是根据词(英文单词)的方式建立的。 
如果一个值里面有多个值,则需要按空格方式隔开,"李 四"系统则认为是两个词。 
MongodB的中文全文索引沒有想象中的强大。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值