Mongodb 简明教程

从 2.4 版本开始,MongoDB 开始支持文本索引以搜索字符串内容。 Text Search 使用词干提取技巧在字符串字段中查找指定词语,方法是省略诸如 a, an, the, 这样的词干停用词。目前,MongoDB 支持约 15 种语言。

最初,文本搜索作为一个实验功能,但从 2.6 版本开始,该配置默认启用。

Creating Text Index

考虑以下 posts 集合中的文档,它包含文章文本及其标签——

> db.posts.insert({
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": ["mongodb", "tutorialspoint"]
}
{
	"post_text" : "writing tutorials on mongodb",
	"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })

我们将在 post_text 字段上创建一个文本索引以便我们可以在文章的文本中进行搜索——

>db.posts.createIndex({post_text:"text"})
{
	"createdCollectionAutomatically" : true,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Using Text Index

现在我们在 post_text 字段上创建了文本索引,我们将在其文本中搜索所有包含单词 tutorialspoint 的文章。

> db.posts.find({$text:{$search:"tutorialspoint"}}).pretty()
{
	"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}

上面的命令返回了以下结果文档,它们在文章文本中包含单词 tutorialspoint ——

{
   "_id" : ObjectId("53493d14d852429c10000002"),
   "post_text" : "enjoy the mongodb articles on tutorialspoint",
   "tags" : [ "mongodb", "tutorialspoint" ]
}

Deleting Text Index

要删除现有文本索引,首先使用以下查询查找索引的名称——

>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 }