MongoDB 数据操作(六)索引(4)全文索引

来源:我的博客站 OceanicKang |《MongoDB 数据操作(六)索引(4)全文索引》

上一篇:《MongoDB 数据操作(六)索引(3)过期索引》

在一些信息管理平台上经常需要进行信息模糊查询

最早时候是利用了某个字段上实现的模糊查询,但是返回的数据并不会很准确,因为只能够查询 A 字段或者 B 字段

而在 MongoDB 里面实现了非常简单的全文检索

定义新的集合

> db.news.insert({"title": "OceanicKang MongoDB", "content": "MongoDB"});
> db.news.insert({"title": "OceanicKang", "content": "quanwensuoyin"});
> db.news.insert({"title": "Kang", "content": "oceanic"});
> db.news.insert({"title": "MongoDB", "content": "kangkang"});
> db.news.insert({"title": "oceanic", "content": "kangkang"});
> db.news.insert({"title": "oceanickang", "content": "kangkang"});
> db.news.insert({"title": "oceanickang PHP Yii ", "content": "kang kang"});
> db.news.insert({"title": "oceanickang", "content": "PHP Yii oceanic"});

设置全文检索

> db.news.createIndex({"title": "text", "content": "text"});

1.png

如果想要全文检索,则使用 $text 判断符,并且使用 $search 进行关键字查询

查询单个关键字

> db.news.find({"$text": {"$search": "oceanic"}}).pretty();

2.png

查询多个关键字(或关系)

> db.news.find({"$text": {"$search": "oceanic PHP"}}).pretty();

3.png

查询多个关键字(与关系)

> db.news.find({"$text": {"$search": "\"oceanic\" \"PHP\""}}).pretty();

4.png

排除关键字

> db.news.find({"$text": {"$search": "\"oceanic\" \"PHP\" -kang"}}).pretty();

5.png

在进行全文检索操作的时候,还可以使用相似度的打分来判断检索结果

为结果打分

> db.news.find({"$text": {"$search": "oceanic"}}, {"score": {"$meta": "textScore"}}).pretty();

6.png

为打分结果排序

> db.news.find(
      {"$text": {"$search": "kang"}},
      {"score": {"$meta": "textScore"}}
  ).sort({"score": {"$meta": "textScore"}}).pretty();

7.png

按照打分的成绩进行排序,可以实现更加准确的信息搜索

但是,如果一个集合的字段太多,每个字段都分别设置全文检索过于麻烦,因此可以统一设置

为所有字段设置全文检索

> db.news.createIndex({"$**", "text"});

8.png

虽然这是一种最简单的设置全文索引的方式,但是尽可能不要使用,因为索引越多越影响性能

下一篇:《MongoDB 数据操作(六)索引(5)地理信息索引》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值