Mongodb进行全文搜索的方法及注意事项是什么
Admin 2022-11-22 群英技术资讯 1082 次浏览
本篇内容介绍了“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:
,
$language:
, $caseSensitive:
, $diacriticSensitive:
} }
在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进行全文搜索的方法及注意事项是什么”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。如果想了解更多相关内容的文章,关注我们,群英网络小编每天都会为大家更新不同的知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Node.js 连接 MongoDB MongoDB是一种文档导向数据库管理系统,由C++撰写而成。 本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。 如果你还没有 MongoDB 的基本知识,可以参考我们的教程:MongoDB 教程。 安装驱动 本教程使用了淘宝定制的 cnpm 命令进行安装: $ cnpm install mongodb 接下来我们来实现增删改查功能。 创建数据库 ..
打开mongodb数据库的方法:在cmd进入mongodb安装目录下的bin目录,然后执行“mongod -db:path D\mongod\data\db”命令即可打开。
MongoDB使用多粒度锁,允许操作锁定全局,数据库或集合级别,并允许各个存储引擎在集合级别下实现自己的并发控制。
MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! 创建固定集合 我们通过createCollection来创建一个固定集合,且capped选项设置为true: >db.createCollection(..
数据类型是数据库学习需要掌握的知识,对此这篇文章给大家分享有关MongoDB数据类型的内容,小编觉得挺实用的,需要的朋友可以参考学习,下面就跟随小编看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008