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

Recherche de texte MongoDB

from2.4Since the beginning of the version, MongoDB has started to support text indexing to search for string content. Text Search (text search) uses stemming analysis technology to search for specific words in string fields by deleting stemming analysis stop words (such as a, an, The, etc.). Currently, MongoDB supports about15d'autres langues.

Activer la recherche de texte

Au début, "Text Search (Recherche de texte)" était une fonction expérimentale, mais à partir de2.6de la version, cette configuration est activée par défaut.

Création de l'index de texte

Considérons lepostsLes documents de la collection, contenant le texte des messages et les tags-

> db.posts.insert({
   "post_text": "profitez des articles mongodb sur w3codebox",
   "tags": ["mongodb", "w3codebox"]
}
{
	"post_text" : "écriture de tutoriels sur mongodb",
	"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })

Nous allons créer un index de texte sur le champ post_text pour pouvoir rechercher dans le texte des messages-

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

Utilisation de l'index de texte

Maintenant, nous avons créé un index de texte sur le champ post_text, nous allons chercherw3codeboxTous les messages contenant le mot dans le texte.

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

La commande ci-dessus retourne le document de résultat suivant, ce documentw3codeboxLe texte de publication contient le mot :

{ 
   "_id" : ObjectId("53493d14d852429c10000002", 
   "post_text" : "profitez des articles mongodb sur w3codebox", 
   "tags" : [ "mongodb", "w3codebox"]}

Suppression de l'index de texte

Pour supprimer l'index de texte existant, veuillez d'abord utiliser la requête suivante pour trouver le nom de l'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
	}
]
>

Après avoir obtenu le nom de l'index à partir de la requête ci-dessus, exécutez la commande suivante. Ici,post_text_textC'est le nom de l'index.

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