MongoDB文本搜索|MongoDB教程2022
目录
由于MongoDB的灵活性和易用性,它在技术公司中获得了巨大的人气。互联网上有大量的大数据和复杂情况。像MongoDB这样面向文档的NoSQL数据库可以有效地处理和分类所有非结构化的复杂数据。MongoDB 2.4版本引入了文本索引,以搜索字符串内容的内部。
什么是MongoDB中的文本搜索?
文本搜索是MongoDB的一项技术,用于从字符串字段中找到一段文本。这种查询操作有助于从字符串中找到一个特定的词。人们可以利用文本索引和$text操作符来执行文本搜索。
文本搜索在搜索单词时采用了词干技术。它放弃了干系词,如a、an、the和其他。MongoDB支持超过15种语言,允许用户有效地寻找特定的文本。
什么是文本索引?
MongoDB中的文本索引用于查找字符串内容中的指定文本。它可以是一个字符串的形式,也可以是一个字符串元素的数组。为了执行文本搜索查询,必须确保集合中只包含一个涵盖多个字段的文本索引。你可以使用createIndex()方法来创建一个文本索引。
语法:
db.collectionName.createIndex( { field: "text" } )
什么是$text操作符?
使用meta查询运算符,你可以对结果的文件进行排序。
语法:
$text:
{
$search: <string>,
$language: <string>,
$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>.
}
如何启用文本搜索?
当该功能最初以试验性的方式引入时,它必须被启用,但从2.6版本开始,它被默认为启用。使用下面的步骤来搜索MongoDB中的文本。
创建一个集合
- 首先创建一个集合。在集合中添加一些文档。下面的例子考虑了post集合下的一个文档。它包含帖子文本和它的标签。
> db.posts.insert({
"post_text": "learn mongodb with simplilearn",
"tags": ["mongodb", "simplilearn"]
}
{
"post_text" : "mongodb detailed tutorials",
"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })
创建一个文本索引
现在在post_text字段上创建一个文本索引,以便在帖子的文本中进行搜索。
>db.posts.createIndex({post_text:"text"})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
如何使用文本索引?
一旦你创建了文本索引,搜索所有文本中含有Simplilearn一词的帖子。
> db.posts.find({$text:{$search:"simplilearn"}}).pretty()
{
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "learn mongodb with simplilearn",
"tags" : [
"mongodb",
"simplilearn"
]
}
该命令返回以下结果,帖子文本中有Simplilearn这个词。
{
"_id" : ObjectId("53493d14d852429c10000002"),
"post_text" : "learn mongodb with simplilearn",
"tags" : [ "mongodb", "simplilearn" ]
}
如何删除一个文本索引?
对于删除一个文本索引,使用下面的查询来找到索引的名称。
>db.posts.getIndexes()
[{"v" : 2,"key" : {"_id" : 1},"name" : "_id_","ns" : "mydb.posts"},{"v" : 2,"key" : {"fts" : "text","ftsx" : 1},"name" : "post_text_text","ns" : "mydb.posts","weights" : {"post_text" : 1},"default_language" : "english","language_override" : "language","textIndexVersion" : 3}]
>
在获得索引的名称后,运行下面的命令来删除它。
注意:下面的命令中的 "post_text_text "是指索引的名称。
>db.posts.dropIndex("post_text_text")
{ "nIndexesWas" : 2, "ok" : 1 }