MongoDB 数据操作(六)索引(4)全文索引
in SQL with 0 comment, Views is 23

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

in SQL with 0 comment, Views is 23

上一篇:《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)地理信息索引》

Responses
选择表情