小码哥的IT人生

MongoDB 全文检索

MongoDB数据库 2023-06-05 13:10:25小码哥的IT人生shichen

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

这个过程类似于通过字典中的检索字表查字的过程。

MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言(暂时不支持中文)的全文索引。

  1. danish
  2. dutch
  3. english
  4. finnish
  5. french
  6. german
  7. hungarian
  8. italian
  9. norwegian
  10. portuguese
  11. romanian
  12. russian
  13. spanish
  14. swedish
  15. turkish

启用全文检索

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

>db.adminCommand({setParameter:true,textSearchEnabled:true})

或者使用命令:

mongod --setParameter textSearchEnabled=true

创建全文索引

考虑以下 posts 集合的文档数据,包含了文章内容(post_text)及标签(tags):

{
   "post_text": "enjoy the mongodb articles on phpcodeweb.com",
   "tags": [
      "mongodb",
      "phpcodeweb"
   ]
}

我们可以对 post_text 字段建立全文索引,这样我们可以搜索文章内的内容:

>db.posts.ensureIndex({post_text:"text"})

使用全文索引

现在我们已经对 post_text 建立了全文索引,我们可以搜索文章中的关键词phpcodeweb.cn:

>db.posts.find({$text:{$search:"phpcodeweb.cn"}})

以下命令返回了如下包含phpcodeweb.cn关键词的文档数据:

{
   "_id" : ObjectId("53493d14d852429c10000002"),
   "post_text" : "enjoy the mongodb articles on phpcodeweb.cn",
   "tags" : [ "mongodb", "phpcodeweb" ]
}
{
   "_id" : ObjectId("53493d1fd852429c10000003"),
   "post_text" : "writing tutorials on phpcodeweb.cn",
   "tags" : [ "mongodb", "tutorial" ]
}

如果你使用的是旧版本的MongoDB,你可以使用以下命令:

>db.posts.runCommand("text",{search:" phpcodeweb.com"})

使用全文索引可以提高搜索效率。


删除全文索引

删除已存在的全文索引,可以使用 find 命令查找索引名:

>db.posts.getIndexes()

通过以上命令获取索引名,本例的索引名为post_text_text,执行以下命令来删除索引:

>db.posts.dropIndex("post_text_text")
 

版权所有 © 小码哥的IT人生
Copyright © phpcodeweb All Rights Reserved
ICP备案号:苏ICP备17019232号-2  

苏公网安备 32030202000762号

© 2021-2024