mongodb全文搜索怎样做?何建立文本索引?
Admin 2021-05-26 群英技术资讯 1022 次浏览
这篇文章给大家分享的是有关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怎么进行数据更新,用什么方法?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
MongoDB是一个基于分布式文件存储的数据库,是由C++语言编写的,目的在于为web应用听可扩展的高性能数据存储解决方案。MongoDB与SQL还是存在很大不同的,例如它没有像 SQL 一样有自动增长的功能,那么mongodb字段值自增长要如何实现呢?
这篇文章主要给大家介绍了Mongodb实现定时备份与恢复的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
MongoDB 删除文档 在前面的几个章节中我们已经学习了 MongoDB 中如何为集合添加数据和更新数据。在本章节中我们将继续学习 MongoDB 集合的删除。 MongoDB remove() 函数是用来移除集合中的数据。 MongoDB 数据更新可以使用 update() 函数。在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。 语法 remove() 方法的基本语法格式如..
在mongodb中可以使用mongoexport命令将数据库文件导出为JSON格式或CSV格式的文件,可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008