MongoDB全文检索

MongoDB全文检索教程

MongoDB 中全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

MongoDB启用全文检索详解

语法

db.adminCommand({setParameter:true,textSearchEnabled:true}) mongod --setParameter textSearchEnabled=true

说明

MongoDB 在 2.6 版本以后是默认开启全文检索的,如果你使用之前的版本,你需要使用以上代码来启用全文检索。

MongoDB创建全文索引详解

语法

db_name.table_name.createIndex({filed: "text"}); // 单个字段建立 全文索引 // 多个字段建立 全文索引 db_name.table_name.createIndex({filed: "text", filed1: "text", ...});

参数

名称 描述
db_name 数据库名
table_name 集合名
field 字段

说明

如果想要表示出全文检索,需要使用 “text" 判断符;要进行数据的查询,需要使用 "search” 运算符:

MongoDB使用全文检索详解

语法

db_name.table_name.find({$text:{$search:"keyword"}})

参数

名称 描述
db_name 数据库名
table_name 集合名
keyword 要搜索的关键词

说明

如果想要表示出全文检索,需要使用 “text" 判断符;要进行数据的查询,需要使用 "search” 运算符:

  • 查询指定关键字:{ “$search” : “查询关键字” }
  • 查询多个关键字(或关系):{ “$search” : “查询关键字 查询关键字 …” } (使用空格分开)
  • 查询多个关键字(与关系):{ “$search” : ““查询关键字” “查询关键字” …” } (使用转义字符分开)
  • 查询多个关键字(排查某一个):{ “$search” : “查询关键字 查询关键字 … -排除关键字” } (使用 “-”)

案例

全文搜索指定关键词

我们首先,使用 mongo 命令,连接上数据库,具体命令如下:

mongo

如下图所示:

14_MongoDB全文搜索.png

现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:

use haicoder

现在,我们使用 insert 插入记录,具体命令如下:

db.haicoder.insert([ {id:1, "url" : "haicoder.net/c", "content" : "c language"}, {id:2, "url" : "haicoder.net/cpp","content" : "cpp stl language"}, {id:3, "url" : "haicoder.net/golang","content" : "go golang language"} ]);

执行完毕后,此时,如下图所示:

15_MongoDB全文搜索.png

我们看到,此时提示我们成功插入了多条记录,现在,我们为 content 字段创建全文检索,具体命令如下:

db.haicoder.ensureIndex({"content":"text"})

执行完毕后,如下图所示:

16_MongoDB全文搜索.png

我们看到,我们已经成功创建了全文检索,现在,我们使用全文搜索进行搜索,具体命令如下:

db.haicoder.find({"$text": {"$search": "stl"} }, {_id:0} )

执行完毕后,此时,如下图所示:

17_MongoDB全文搜索.png

我们看到,此时,我们搜索到了记录。

全文搜索多个关键词

现在,我们使用全文搜索用来搜搜多个关键词,具体命令如下:

db.haicoder.find({"$text": {"$search": "stl golang"} }, {_id:0} )

执行完毕后,此时,如下图所示:

18_MongoDB全文搜索.png

我们看到,此时,搜索到了包含 stl 或者包含 golang 的记录,这里是或的关系。

全文搜索同时匹配多个关键词

现在,我们使用全文搜索用来搜搜多个关键词,具体命令如下:

db.haicoder.find({"$text": {"$search": "\"go\" \"golang\" "} }, {_id:0} )

执行完毕后,此时,如下图所示:

19_MongoDB全文搜索.png

我们看到,此时,搜索到了包含 go 并且包含 golang 的记录,这里是与的关系,我们再次使用与搜索同时匹配多个关键词,具体命令如下:

db.haicoder.find({"$text": {"$search": "\"stl\" \"golang\" "} }, {_id:0} )

执行完毕后,此时,如下图所示:

20_MongoDB全文搜索.png

我们看到,此时我们搜索了同时匹配 stl 和 golang 的记录,并没有搜索到任何记录。

全文搜索排除关键词

现在,我们使用全文搜索用来搜搜多个关键词,具体命令如下:

db.haicoder.find({"$text": {"$search": "language -golang"} }, {_id:0} )

执行完毕后,此时,如下图所示:

21_MongoDB全文搜索.png

我们看到,此时,搜索到了包含 language 并且不包含 golang 的记录。

MongoDB全文检索总结

MongoDB 中全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。