MONGODB – INDEXLER İLE ÇALIŞMA
MongoDbde de aynı ilişkisel veritabanlarında olduğu gibi veriyi indexleyebiliriz. Bu işlemi yapmak oldukça basittir. Aşağıda bir collection yaratıp içerisine başlangıç dokümanlarını insert edelim.
db.ogrenci.insert( [ {"no":44,"ad":"Emir","soyad":"Çelik"}, {"no":81,"ad":"Safa","soyad":"Arslan"}, {"no":275,"ad":"Ömer","soyad":"Gül"}, {"no":284,"ad":"Furkan","soyad":"Becit"}, {"no": 22,"ad":"Şevval","soyad":"Aksak"}, {"no":140,"ad":"Yunus","soyad":"Çakıroğlu"}, {"no":708,"ad":"Yunus","soyad":"Başkaya"}, {"no":32,"ad":"İsmail","soyad":"Akpinar"} ] )
Oluşturduğumuz koleksiyonda no propertysi üzerinden indexleme yapmak istediğimizde yazacağımız sorgu aşağıdaki gibi olacaktır.
db.ogrenci.createIndex( {"no": 1} )
Eğer istersek birden fazla propertynin birleşiminden de bir indexi aşağıdaki gibi oluşturabiliriz.
db.ogrenci.createIndex( { "property1": 1, "property2":2 } )
Eğer oluşturacağımız indexin unique olmasını istersek…
db.ogrenci.createIndex( {"no": 1} ,{unique:true} )
Oluşturduğumuz indexleri görmek için de aşağıda oluşturduğumuz sorguyu kullanmamız yeterlidir.
db.ogrenci.getIndexes()
Bu sorgunun Json dönüşünde key propertysi içerisinde hangi propertynin indexlendiği , name propertysi içerisinde indexin ismi, ns propertysi içerisinde de indexin namespacesi verilmektedir.
MongoDbde text veriler üzerinde search işleminin daha hızlı yapılabilmesi için text verilerini de indexleyebiliriz.
db.ogrenci.createIndex({"ad":"text"})
Eğer tüm text alanlarının indexlenmesini istersek de aşağıdaki gibi bir sorgu kullanabiliriz.
db.ogrenci.createIndex({"$**":"text"} ) db.ogrenci.createIndex({"ad":"text"},{default_language: turkish })
Bir örnek olması açısından aşağıdaki gibi bir haber collectionu yaratıp, aşağıdaki verileri insert edelim.
db.haber.insert( [ {tag:"spor",baslik:"sallandik ama yikilmadik",icerik:"milli takim ukrayna ile 2-2 berabere kaldı",}, {tag:"spor",baslik:"emre mor farki",icerik:"Emre mor milli takim ile çıktığı maçta yine fark yarattı"}, {tag:"ekonomi",baslik:"indirim geliyor",icerik:"vergi borgu düzenlemelerinde indirim yine kapıda"}, ] )
Daha sonra icerik alanını indexleyelim ve indeximize bir isim verelim.
db.haber.createIndex( { icerik:"text"}, {name:"icerik_text_index"} )
Ve aşağıdaki gibi performanslı aramamızı yapalım.
db.haber.find( {$text: { $search: "milli" } } )
Eğer birden fazla kelimeyi aratmak istiyorsak aşağıdaki sorguyu kullanabiliriz. Buradaki önemli nokta, aşağıdaki sorgunun milli ve ukrayna kelimelerini ayrı ayrı aratıyor olmasıdır.
db.haber.find( {$text: { $search: "milli ukrayna" } } )
Cümleyi bir bütün halinde aratmak istersek de aşağıdaki gibi \ ile cümleyi sıkıştırabiliriz.
db.haber.find( {$text: { $search: "\"milli takims\"" } } ) db.haber.find( {$text: { $search: "milli -ukrayna" } } )