MongoDB - Búsqueda de texto

A partir de la versión 2.4, MongoDB comenzó a admitir índices de texto para buscar dentro del contenido de cadenas. losText Search utiliza técnicas de derivación para buscar palabras específicas en los campos de cadena eliminando palabras vacías derivadas como a, an, the, etc. En la actualidad, MongoDB admite alrededor de 15 idiomas.

Habilitar la búsqueda de texto

Inicialmente, la búsqueda de texto era una función experimental, pero a partir de la versión 2.6, la configuración está habilitada de forma predeterminada.

Crear índice de texto

Considere el siguiente documento en posts colección que contiene el texto de la publicación y sus etiquetas -

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

Crearemos un índice de texto en el campo post_text para que podamos buscar dentro del texto de nuestras publicaciones -

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

Usar índice de texto

Ahora que hemos creado el índice de texto en el campo post_text, buscaremos todas las publicaciones que tengan la palabra tutorialspoint en su texto.

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

El comando anterior devolvió los siguientes documentos de resultado con la palabra tutorialspoint en su mensaje de texto -

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

Eliminar índice de texto

Para eliminar un índice de texto existente, primero busque el nombre del índice utilizando la siguiente consulta:

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

Después de obtener el nombre de su índice de la consulta anterior, ejecute el siguiente comando. Aquí,post_text_text es el nombre del índice.

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