MongoDB - Metin Arama

Sürüm 2.4'ten başlayarak MongoDB, dize içeriği içinde arama yapmak için metin dizinlerini desteklemeye başladı. Text Search Dize alanlarında belirtilen sözcükleri aramak için kök türetme tekniklerini kullanır. a, an, the, vb. Şu anda MongoDB yaklaşık 15 dili desteklemektedir.

Metin Aramayı Etkinleştirme

Başlangıçta Metin Arama deneysel bir özellikti, ancak sürüm 2.6'dan itibaren yapılandırma varsayılan olarak etkindir.

Metin Dizini Oluşturma

Aşağıdaki belgeyi düşünün posts gönderi metnini ve etiketlerini içeren koleksiyon -

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

Post_text alanında bir metin dizini oluşturacağız, böylece yazılarımızın metni içinde arama yapabiliriz -

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

Metin Dizinini Kullanma

Artık post_text alanında metin indeksini oluşturduğumuza göre, kelimesini içeren tüm postaları arayacağız. tutorialspoint metinlerinde.

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

Yukarıdaki komut, kelimesini içeren aşağıdaki sonuç belgelerini döndürdü tutorialspoint gönderi metinlerinde -

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

Metin Dizini Siliniyor

Mevcut bir metin dizinini silmek için önce aşağıdaki sorguyu kullanarak dizinin adını bulun -

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

Yukarıdaki sorgudan dizininizin adını aldıktan sonra aşağıdaki komutu çalıştırınız. Buraya,post_text_text dizinin adıdır.

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