MongoDB文本搜索 | MongoDB教程2022

127 阅读1分钟

MongoDB文本搜索|MongoDB教程2022

MongoDB Text Search

目录

由于MongoDB的灵活性和易用性,它在技术公司中获得了巨大的人气。互联网上有大量的大数据和复杂情况。像MongoDB这样面向文档的NoSQL数据库可以有效地处理和分类所有非结构化的复杂数据。MongoDB 2.4版本引入了文本索引,以搜索字符串内容的内部。

什么是MongoDB中的文本搜索?

文本搜索是MongoDB的一项技术,用于从字符串字段中找到一段文本。这种查询操作有助于从字符串中找到一个特定的词。人们可以利用文本索引和$text操作符来执行文本搜索。

文本搜索在搜索单词时采用了词干技术。它放弃了干系词,如a、an、the和其他。MongoDB支持超过15种语言,允许用户有效地寻找特定的文本。

什么是文本索引?

MongoDB中的文本索引用于查找字符串内容中的指定文本。它可以是一个字符串的形式,也可以是一个字符串元素的数组。为了执行文本搜索查询,必须确保集合中只包含一个涵盖多个字段的文本索引。你可以使用createIndex()方法来创建一个文本索引。

语法:

db.collectionName.createIndex( { field: "text" } )

什么是$text操作符?

使用text操作符,人们可以搜索文本索引。该操作符可以对带有文本索引的集合进行文本搜索操作。它用空格对每个搜索字符串进行标记,除了"""/"之外,将大多数标点符号视为定界符。然后,该操作符对这些标记进行逻辑OR操作。使用text操作符,人们可以搜索文本索引。该操作符可以对带有文本索引的集合进行文本搜索操作。它用空格对每个搜索字符串进行标记,除了"-"和"/"之外,将大多数标点符号视为定界符。然后,该操作符对这些标记进行逻辑OR操作。使用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 }