mongodb全文搜索怎样做?何建立文本索引?
Admin 2021-05-26 群英技术资讯 583 次浏览
这篇文章给大家分享的是有关mongodb全文搜索的内容,为帮助大家熟悉mongodb全文搜索,下文还有文本搜索示例,供大家参考学习。下面就跟随小编一起看看吧。
众所周知在传统的关系型数据库中,我们通常将数据结构化,通过一系列表关联、聚合来查询我们所需的结果。而在非结构化的数据中,缺少这种预定义的结构,因而如何快速查询定位到我们所需要的结果,不是一件容易的事。
Mongodb作为一种NoSQL数据库,非常适合存储和管理非结构化数据,例如互联网上的各种文本数据。假如我们用Mongodb存储了很多博客文章,那么如何快速找到所有关于“nodejs”这个主题的文章呢?Mongodb内建的全文搜索可以帮助我们完成这个功能。下面话不多说了,来一起看看详细的介绍:在本篇博文中,将要介绍的是我使用Mongdb text search的一些经验。
Mongodb text search是什么?
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版本中,已经增加了对中文文本的搜索。
$caseSensitive设置是否区分大小写。
$diacriticSensitive设置是否区别发音符号,CAFÉ于Café是同一语义,只是重音不一样。
我们还可以对搜索的结果按匹配度进行排序:
db.posts.find( { $text: { $search: "hello world" } }, { score: { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } )
注意事项
Mongodb建立文本索引时,会对提取所有文本的关键字建立索引,因而会造成一定的性能问题。所以对于结构化的字段,建议用普通的关系查询,如果需要对大段的文本进行搜索,才考虑用全文搜索。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持
关于mongodb全文搜索的分享就到这,希望大家阅读完这篇文章能有所收获,想要了解更多使用mongodb技巧,可以关注其他文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
mongodb做主从的方法:1、首先启动主Mongodb实例;2、启动从Mongodb实例,用mongod --port 27018 --dbpath命令;3、验证主从模式。
Node.js 连接 MongoDB MongoDB是一种文档导向数据库管理系统,由C++撰写而成。 本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。 如果你还没有 MongoDB 的基本知识,可以参考我们的教程:MongoDB 教程。 安装驱动 本教程使用了淘宝定制的 cnpm 命令进行安装: $ cnpm install mongodb 接下来我们来实现增删改查功能。 创建数据库 ..
我们在使用Mongodb数据库的时候需要为每个数据库都增加用户权限,那么你知道MongoDB怎么添加用户权限吗?
mongodb在查询时可以使用count、distinct、group、mapreduce、aggregate等方法实现聚合查询。
MongoDB 自动增长 MongoDB 没有像 SQL 一样有自动增长的功能, MongoDB 的 _id 是系统自动生成的12字节唯一标识。 但在某些情况下,我们可能需要实现 ObjectId 自动增长功能。 由于 MongoDB 没有实现这个功能,我们可以通过编程的方式来实现,以下我们将在 counters 集合中实现_id字段自动增长。 使用 counters 集合 考虑以下 products 文档。我们希望 _id 字..
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008