Mongodb进行全文搜索的方法及注意事项是什么
Admin 2022-11-22 群英技术资讯 1101 次浏览
本篇内容介绍了“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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
mongodb多表联查的方法:1、首先用from关联主从表名;2、用as查询结果名;3、用Aggregation进行多条件查询;4、查询结果赋给results;5、用print()输出查询结果。
这篇文章给大家分享的是有关mongodb全文搜索的内容,为帮助大家熟悉mongodb全文搜索,下文还有文本搜索示例,供大家参考学习。下面就跟随小编一起看看吧。
今天小编就将为大家介绍MongoDB查询耗时记录的方法,相信很多小伙伴们对此还不了解对吧,那么下面小编就带大家一起去看看MongoDB如何查询耗时记录的内容。
MongoDB的复合索引是什么?很多人可能对于MongoDB的复合索引不是很熟悉,因此这篇文章小编就给大家介绍一下关于MongoDB的复合索引的定义和使用,需要的朋友可以参考。
MongoDB默认使用_id字段作为主键,类型为ObjectId。ObjectId的生成有一定的规则,详情可以查看这篇文章MongoDB深究之ObjectId
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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