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

Ricerca testuale MongoDB

Dalla versione 2.4, MongoDB inizia a supportare l'indice di ricerca testuale per cercare il contenuto delle stringhe. La Ricerca Testuale (Text Search) utilizza la tecnica di analisi lessicale per trovare parole specifiche nei campi delle stringhe attraverso l'eliminazione delle parole di stop analitiche (come a, an, The, ecc.). Attualmente, MongoDB supporta circa 15 lingue.

Abilitare la ricerca di testo

All'inizio, "Text Search (Ricerca Testo)" era una funzione sperimentale, ma è stato abilitato di default a partire dalla versione 2.6.

Creazione dell'indice di testo

Considera il seguentepostsdocumenti nella raccolta, che contengono il testo degli articoli e i tag-

> db.posts.insert({
   "post_text": "goditi gli articoli mongodb su w3codebox",
   "tags": ["mongodb", "w3codebox"]
}
{
	"post_text": "scrivere tutorial su mongodb",
	"tags": ["mongodb", "tutorial"]
}
WriteResult({ "nInserted": 1 })

Creeremo un indice di testo sul campo post_text per poter cercare nei testi degli articoli-

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

Utilizzando l'indice di testo

Ora, abbiamo creato un indice di testo sul campo post_text, cercheremow3codeboxposti che contengono la parola.

> db.posts.find({$text:{$search:"w3codebox"}}).pretty(){
	"_id": ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text": "goditi gli articoli mongodb su w3codebox",
	"tags": [
		"mongodb",
		"w3codebox"
	]
}

Il comando sopra restituisce il seguente documento di risultato, il documento di risultatow3codeboxcontiene la parola:

{ 
   "_id": ObjectId("53493d14d852429c10000002"), 
   "post_text": "goditi gli articoli mongodb su w3codebox", 
   "tags": ["mongodb", "w3codebox"]}

Elimina l'indice di testo

Per eliminare l'indice di testo esistente, utilizza prima la seguente query per trovare il nome dell'indice-

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

Dopo aver ottenuto il nome dell'indice dalla query sopra, eseguire il seguente comando. Ecco,post_text_textÈ il nome dell'indice.

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