English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основное руководство по MongoDB

Дополнительное руководство по MongoDB

Текстовый поиск MongoDB

С версии 2.4 MongoDB начинает поддерживать текстовые индексы для поиска содержимого строк. Поиск текста (Text Search) использует метод морфологического анализа для поиска указанных слов в полях строк через удаление морфологических анализаторов стоп-слов (например, a, an, The и т.д.). В настоящее время MongoDB поддерживает около 15 языков.

Включение поиска текста

Вначале, "Text Search (Текстовый поиск)" был экспериментальной функцией, но начиная с версии 2.6, эта конфигурация была включена по умолчанию.

Создание текстового индекса

Рассмотрим следующийpostsдокументы в集合е, содержащие текст帖子 и теги-

>db.posts.insert({
   "post_text": "enjoy the mongodb articles on w3codebox",
   "tags": ["mongodb", "w3codebox"]
}
{
	"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
}

Использование текстового индекса

Теперь, мы создали текстовый индекс в поле post_text, и мы будем搜索w3codeboxвсе帖子, содержащие слово.

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

Команда, приведенная выше, возвращает следующий документ результатов, документ результатовw3codeboxв тексте发布的 содержится слово:

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

Удаление текстового индекса

Чтобы удалить существующий текстовый индекс, сначала используйте следующий запрос, чтобы найти имя индекса-

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