来源:我的博客站 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"});
如果想要全文检索,则使用 $text
判断符,并且使用 $search
进行关键字查询
查询单个关键字
> db.news.find({"$text": {"$search": "oceanic"}}).pretty();
查询多个关键字(或关系)
> db.news.find({"$text": {"$search": "oceanic PHP"}}).pretty();
查询多个关键字(与关系)
> db.news.find({"$text": {"$search": "\"oceanic\" \"PHP\""}}).pretty();
排除关键字
> db.news.find({"$text": {"$search": "\"oceanic\" \"PHP\" -kang"}}).pretty();
在进行全文检索操作的时候,还可以使用相似度的打分来判断检索结果
为结果打分
> db.news.find({"$text": {"$search": "oceanic"}}, {"score": {"$meta": "textScore"}}).pretty();
为打分结果排序
> db.news.find(
{"$text": {"$search": "kang"}},
{"score": {"$meta": "textScore"}}
).sort({"score": {"$meta": "textScore"}}).pretty();
按照打分的成绩进行排序,可以实现更加准确的信息搜索
但是,如果一个集合的字段太多,每个字段都分别设置全文检索过于麻烦,因此可以统一设置
为所有字段设置全文检索
> db.news.createIndex({"$**", "text"});
虽然这是一种最简单的设置全文索引的方式,但是尽可能不要使用,因为索引越多越影响性能