Mehmet AYHAN

Mehmet AYHAN

Yazılım Geliştirici

Elasticsearch Nedir?

Elasticsearch Nedir?

Yayın Tarihi   | 9573 Görüntülenme

ElasticSearch Apache Lucene altyapısından geliştirilmiş, açık kaynak kodlu, ölçeklenebilir bir tam metin arama motorudur. ElasticSearch big data dünyasına has bahsedilen problemlerle başa çıkmak adına geliştirilmiş araçlardan birisidir.

Veritabanları büyüdükçe yapılan sorgu işlemlerinde hız/performans sorunları yaşanmaktadır. Aranan verinin bulunması her geçen sefer uzun sürecektir. Çözüm olarak metin alanlarında yer alan kelimelerin indekslenerek sıralı olarak kategorize edilmesidir. Bu sayede büyük boyutlu veriler ile çalışılırken dahi, veritabanının performansını arttırmış oluruz.

ElasticSearch çoklu dil desteği, güçlü bir sorgu dili ve otomatik tamamlama gibi tam metin arama yetenekleri sağlar.

Elasticsearch aramaları nasıl yapar?

Elasticsearch; text üzerinden doğrudan arama yapmak yerine, indexler üzerinden arama yaparak çok hızlı bir şekilde sonuçlar üretir. Bir kelimenin hangi dökümanda geçtiğini veriler kaydedilirken indexler. Sonrasında ise kelime aramak istediğimizde tüm veriler üzerinde arama yapmak yerine, daha önce oluşturulan index listesi üzerinden sonuçlar hızlıca bulunur. Mesela üstteki resimdeki 6 kayıt eklenirken elasticsearch bu kayıttaki geçen kelimeleri kategorize ederek hangi kelimenin hangi kayıtta olduğunu yeni bir listede sıralar. Biz arama yaptığımızda ise artık kayıtlardan değil, indekslediği yeni listeden sonuçları döndürür.

Elasticsearch terimleri

Elasticsearch, verileri kaydederken bunları düzenli bir şekilde tutmak için bazı terimler geliştirmiştir. Buda normal bir veritabanına benzer.

Index: Her bir veritabanı index olarak belirtilir.

Örnek: eticaret

Type: Veritabanındaki tablolardır.

Örnek: urunler, kategoriler, siparişler…

Field: Tablolar içerisindeki sütunlardır.

Örnek: urunler => id kategori_id adi fiyat

Documents:Tablo içerisindeki kayıtlarımızdır.

Mapping: Veritabanımızdaki schemalardır.

Örnek: string, integer, double, boolean

Shard: Bir index, çok fazla veri barındırdığı zaman node'un donanımsal depolama limitlerini zorlayabilecek duruma gelebilir. Bu sorunu çözmek için elasticsearch, bir index'i birden çok parçaya bölmemize olanak tanıyan "shards" yapısını kullanmakta. Bir index oluşturduğunuzda çok kolay bir şekilde kaç tane shard kullanmak istediğinizi tanımlayabilirsiniz. Her bir shard, bir index'in sahip olduğu tüm özelliklere sahip olan ve cluster'da ki herhangi bir node'da barındırılabilen tamamen bağımsız bir indexe sahiptir.

Elasticsearch kurduğunuz zaman varsayılan url: http://localhost:9200 olarak gelir.

İstemci desteği

ElasticSearch RestfulAPI üzerinden hizmet vermektedir. Böylelikle tüm programlama dilleri ile kullanılabilmektedir. Hem Windows Hem Linux’da kolayca çalışabilir.

Java, Php, Python, Perl, Ruby, .NET gibi birçok platform için client desteği mevcuttur.

Elasticsearch kısaca anlatmaya çalıştım.

Yazı boyunca sürekli kayıtları indekslemekten bahsettik. Kısaca mysql deki indeksleme özelliğini de anlatayım.

2 çeşit index vardır.

1- Clustered Index ( Primary Index): Verinin sürekli olarak sıralanmasını sağlar. Her tabloda sadece 1 tane sütuna verilebilir. Eklenen bütün kayıtlar Clustered Index göre sıralanır. Yani bu da her zaman düzenli bir yapıyla sıralandığını gösterir. Primary Key kısıtlamasına sahip bir sütun varsa bu sütun Clustered Index özelliğine sahiptir.

2- Non-Clustered ( Secondary Index): Clustered Index sadece bir sütuna veriliyor. Peki, biz başka sütunda arama yapmak istediğimizde performansın düşmesini engellemek için bunu geliştirmişlerdir. Çalışma mantığı arka plan kendi tablosunu oluşturur. Arama yapılacak sütuna göre o tabloyu düzenli olarak sıralar. Bütün sütunları Non-Clustered olarak işaretleyebiliriz.