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

Búsqueda de texto MongoDB

desde2.4A partir de la versión inicial, MongoDB comenzó a soportar índices de texto para buscar contenido de cadenas. La Búsqueda de Texto (Text Search) utiliza la tecnología de análisis de raíz para encontrar palabras específicas en campos de cadena eliminando las palabras de análisis de raíz (como a, an, The, etc.). Actualmente, MongoDB admite aproximadamente15varias lenguas.}}

Habilitar búsqueda de texto

Inicialmente, "Text Search (Búsqueda de Texto)" era una función experimental, pero desde2.6a partir de la versión, esta configuración se habilita por defecto.

Crear índice de texto

Considera lo siguientepostslos documentos en la colección, que contienen el texto de los artículos y las etiquetas-

> db.posts.insert({
   "post_text": "disfruta de los artículos de mongodb en w3codebox",
   "tags": ["mongodb", "w3codebox"]
}
"ns": "mydb.posts"
	"post_text": "escribiendo tutoriales sobre mongodb",
	"tags": ["mongodb", "tutorial"]
})
WriteResult({ "nInserted": 1 })

Vamos a crear un índice de texto en el campo post_text para poder buscar en el texto de los artículos.-

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

Usar índice de texto

Ahora, hemos creado un índice de texto en el campo post_text, buscaremosw3codeboxtodos los artículos que contienen la palabra en el texto.

> db.posts.find({$text:{$search:"w3codebox"}}).pretty(){
	"_id": ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text": "disfruta de los artículos de mongodb en w3codebox",
	"tags": [
		"mongodb",
		"w3codebox"
	]
}

El comando anterior devuelve el siguiente documento de resultados, el documentow3codeboxEl texto de publicación contiene la palabra:

"ns": "mydb.posts" 
   "_id": ObjectId("53493d14d852429c10000002", 
   "post_text": "disfruta de los artículos de mongodb en w3codebox", 
   "tags": ["mongodb", "w3codebox"]}

Eliminar índice de texto

Para eliminar el índice de texto existente, primero use la siguiente consulta para encontrar el nombre del índice-

>db.posts.getIndexes()[
	"ns": "mydb.posts"
		"v": { 2,
		"key": {
			"_id": 1
		}
		"name": "_id_",
		"ns" : "mydb.posts"
	}
	"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
	}
]
>

Después de obtener el nombre del índice de la consulta superior, ejecuta el siguiente comando. Aquí,post_text_textEs el nombre del índice.

>db.posts.dropIndex("post_text_text")
{ "nIndexesWas": : 2, "ok": : 1 }