加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

mongodb为何建立文本索引

发布时间:2023-12-28 19:55:43 所属栏目:系统 来源:DaWei
导读: 这篇文章给大家分享的是有关mongodb全文搜索的内容,为帮助大家熟悉mongodb全文搜索,供大家参考学习。下面就跟随小编一起看看吧。

Mongodb text search是Mongodb对数据库
       这篇文章给大家分享的是有关mongodb全文搜索的内容,为帮助大家熟悉mongodb全文搜索,供大家参考学习。下面就跟随小编一起看看吧。

       Mongodb text search是Mongodb对数据库进行搜索的功能模块,类似于数据库内建的搜索引擎。有些人可能会疑问,查数据库为什么还需要搜索引擎?直接用条件查询不就得了。例如在前面的文章主题搜索中,我们不可能事先提取出每篇文章的主题,然后用专门的字段存储,因此没办法进行条件查询。并且同一个主题词,有多种不同的表达方式,例如”node”、”nodejs”可视为同一个主题。

       Mongodb text search可以自动地对大段的文本数据进行分词处理、模糊匹配、同义词匹配,解决文本搜索的问题。

       建立文本索引

       要使Mongodb能够进行全文搜索,首先要对搜索的字段建立文本索引。建立文本索引的关键字是text,我们既可以建立单个字段的文本索引,也可以建立包含多个字段的复合文本索引。需要注意的是,每个collection只能建立一个文本索引,且只能对String或String数组的字段建立文本索引。

       我们可以通过以下命令,建立一个文本索引:
db.collection.createIndex({ subject: "text", content: "text" })

       在mongoose中我们可以通过以下代码,创建文本索引:
schema.index({ subject: "text", content: "text" })

       需要注意的是:由于每个collection只支持一个文本索引,所以当你需要在schema中添加或删除文本索引字段时,往往不起作用。这时候你需要到数据库中,手动删除已经建立的文本索引。
       
       文本搜索的语法为:
{
 $text:
  {
   $search: <string>,
   $language: <string>,
   $caseSensitive: <boolean>,
   $diacriticSensitive: <boolean>
  }
}
       在mongoose中,我们可以通过以下语句进行文本搜索:
var query = model.find({ $text: { $search: "hello world" } })

       $search后面的关键词可以有多个,关键词之间的分隔符可以是多种字符,例如空格、下划线、逗号、加号等,但不能是-和\",因为这两个符号会有其他用途。搜索的多个关键字是or的关系,除非你的关键字包含-。例如hello world会包含所有匹配hello或world的文本,而hello -world只会匹配包含hello且不包含world的文本。

       $language指示搜索的语言类型,在最新的Mongodb 3.2 enterprise版本中,已经增加了对中文文本的搜索。

       Mongodb建立文本索引时,会对提取所有文本的关键字建立索引,因而会造成一定的性能问题。所以对于一些结构化的字段,一般都会建议用比较普通的关系直接百度查询,如果需要对大段的文本数据项进行相关性的搜索,才考虑用全文搜索。

       关于mongodb全文搜索的分享就到这,希望大家阅读完这篇文章能有所收获,想要了解更多使用mongodb技巧,可以关注其他文章。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章