6. MongoDb – Indexler ile çalışma

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