ELASTİC SEARCH

Hande Emren
4 min readFeb 15, 2019

--

Elastic Search Java ile geliştirilmiş open source, lucene tabanlı, ölçeklenebilir bir tam metin(full text) arama motoru ve veri analiz aracıdır.

Bilişim dünyasında hizmet veren orta ve büyük ölçekli şirketlerde her an büyük ölçülerde veri üretiliyor. Bu büyük veri havuzuna big data deniliyor. Big data dünyasındaki bu verilerin önemli bir bölümü başlangıçta, yapılandırılmamış(unstructured) dağınık ve tek başına çok da anlamlı olmayan halde kaydediliyorlardı. Zamanla artmaya devam eden bu verilerin performanslı olarak kayıt altına alınması, erişilmesi, analiz edilip işlenmesi zorlaştı.

İşte Elastic Search bu problemlerle başa çıkmak için geliştirilmiş araçlardan birisidir. Mozilla, Foursquare, GitHub gibi projelerde içerik aramaları, veri analizi ve sorgulamalar Elastic Search kullanarak yapılır.

Özellikleri

⦁ Çoklu dil desteği vardır.

⦁ Güçlü ve esnek bir sorgu dili vardır.

⦁ Otomatik tamamlama yeteneği vardır.

⦁ Dağıtık(distributed) olarak indexlemeye izin verir ve dağıtık veriler üzerinden arama yapılabilir.

⦁ Yakın gerçek zamanlı(near real-time) verileri analiz etmeyi sağlar.

⦁ Cluster yapıya sahiptir ve cluster yapısı oldukça basittir.

⦁ Veri tipine uygun biçimde otomatik Mapping yapabilir.

⦁ Kendi içinde yüksek erişilebilirlik (high availability) sunar.

⦁ Dökümanları JSON olarak indexler.

⦁ Hızlı kurulum ve kolay konfigürayon vadeder.

⦁ Veri aktarmak oldukça kolaydır.

⦁ Elasticsearch’ü monitör edebilen Kibana ve log barındırmak için Logstash araçları ile bilirkte kullanılabilir.

⦁ RestfullAPI üzerinden hizmet verdiğinden dolayı tüm programlama dilleriyle kullanılabilir.

⦁ Veri saklama biçimi ilişkisel değil document-oriented şeklindedir.

⦁ HBase, Cassandra, MongoDB gibi NOSQL veritabanlarından da Elastic Serach’e aktarım yapmayı mümkün kılar.

Peki Lucene tabanlı derken ne demek istiyoruz?

Teknoloji dünyasında her şey başta bir ihtiyaçla başlamış ve tüm teknolojiler ihtiyaç üzerine geliştirilmiştir. Lucene bir metin arama aracına ihtiyaç duyulduğu için geliştirildi. Lucene, temelinde bazı mantık ve metodolojilerle tam metin arama için geliştirildi ve oldukça işlevsel biçimde büyük boyutlu metinler üzerinde arama yaparak çalışmaya başladı.

Lucene, tek makinede devasa boyutta metin dosyaları üzerinde arama yapıyorken harika iş çıkartıyordu. Ancak gelişen dünyada veriler de hızlı ve anlık(real-time) olarak akmaya başladı. Ve bunları ölçeklemek için dağıtık(distributed) sistemler geliştirildi. Ancak Lucene bu sistemlere uyum sağlayamadı. Bunun sebeple dağıtık sistemlere uyum sağlayabilecek teknolojiler üretilmeye başlandı. Elastic Search de bu ürünlerden bir tanesi.

Temel Elastic Search Kavramları

Cluster

Tüm verilerinizi bir arada tutan ve tüm indexleme ve arama yeteneklerinin yürütüldüğü birden çok Node’dan oluşan bir küme veya node koleksiyonudur.

Node

Tek bir servera verilen isimdir. Verilerin depolandığı makinelerin her biridir. Clusterların indexleme ve arama yetenekleri bu nodelar sayesinde gerçekleşir. Clusterlardaki isimlendirme mantığındaki gibi nodelara da başlangıçta benzersiz bir id atanır (Universally Unique IDentifier).

Bu isimlendirmeler, nodelar arasındaki bilgi alışverişinin yönetimi için oldukça önemlidir. Eğer istenirse bu isimler değiştirilebilir. Varsayılan olarak her node “elasticsearch” şeklinde isimlendirilen bir clusterda çalışmak üzere ayarlanmıştır. Hangi node’un hangi clustera gitmesini isterseniz, o cluster ismine yönlendirmelisiniz.

Indice

Klasik veritabanlarında Databaseler Elastic Searchte Indice olarak nitelendirilir. Bir Elastic Search Clusterı birden fazla indice bulundurabilir.

Type

Tipleri, yine veritabanı içerisindeki tablolar yerine geçer. Bir indice, birden fazla type barındırabilir.

Document

Veritabanlarındaki Rows Elastic Searchte Documents olarak temsil edilirler. Her type, birden fazla document barındırır.

Field

Klasik veritabanlarındaki kolonlar Elastic Searchte Field olarak nitelendirilir. Her document birden fazla filelda sahiptir.

RESTfull Api

Elastic Search, RESTfull Apiye yöneliktir. Hemen hemen her eylem RESTfull API ile, HTTP üzerinden JSON kullanarak gerçekleştirilebilir.

Index

Elastic Search belge yönelimli(document oriented) bir arama motorudur. Elastic Searchte her kayıt, yapılandırılmış JSON belgesidir. Bir başka deyiş ile, ElasticSearch’e indekslenmesi için gönderilmiş her veri bir JSON dokümandır. Dokümanın bütün alanları varsayılan olarak indekslenir ve tek bir sorguda kullanılabilir.

Elastic Search indeksleri, veritabanları gibi düşünülebilir. Bir veritabanı düzenli bilgiler topluluğudur, Elastic Search indeksleri de yapılandırılmış JSON belgeleri topluluğudur.

Near Realtime (Yakın gerçerk zamanlı)

Elastic Search gerçek zamana yakın bir hızla çalışır. Gerçek zamanlı yerine “yakın gerçek zamanlı” denmesindeki sebep bir dökümanı, gerçek zamandan bir saniye gibi çok az farklı bir gecikme süresi ile indexlemesi.

Mapping

Mapping (Haritalama), bir belgenin arama motoruna nasıl aktarılması gerektiğini tanımlama sürecidir. Tipler oluşturulurken, mapping bilgisi ile oluşturulur. ElasticSearch, gönderilen veriden hareketle(örneğin string, integer, double, boolean) mapping’i otomatik oluşturur(açık haritalama/explicit mapping). Bir mapping tanımlayarak varsayılan mapping’i geçersiz kılabilirsiniz.

Verileri indexlerken bu verilerin hangi tipte olduğunu göstermemiz gerekir. Yani bir kelimeyi indexlerken o kelimenin hangi veri tipinde olduğu bilgisinin tanımlandığı işlemdir.

Full Text Search (Tam Metin Arama)

Veritabanlarında depolanan veri büyüdükçe, bu veri üzerinde gerçekleştirilen sorgu operasyonlarında hız/performans sorunları meydana gelmektedir. Buna çare olarak, metin alanlarında yer alan kelimelerin indekslenerek kataloglanması yoluna gidilmiştir. Bu sayede büyük boyutlu veri ile çalışılırken dahi, veritabanlarının daha hızlı, performanslı cevap vermesi sağlanmıştır.

Full Text Search herhangi bir kaynaktan alınan metin belgeleri içinden, herhangi bir anahtar kelimenin aratılarak, anahtar kelime ile eşleşen dökümanların bulduğu sonuca hızlı şekilde erişime verilen isimdir.

Shard

Bir seferde milyonlarca dökümanı indexlemek için yeterli donanıma/server kapasitesine sahip olunmayabilir. Böyle bir durumda bu indexlemeyi tek bir node ile yapamak istersek, disk kapasitesinin dolması veya aşırı yavaş bir indexleme hızı ile karşı karşıya kalabilirsiniz. Bunun önüne geçmek için Shard ve Replika kavramları mevcuttur.

Yapılacak olan index, bir node’da yeniden shardlara bölünür. Bu shardları arzunuza göre ayarlayabilmektesiniz.

Shardlı mimarinin kullanılmasındaki temel iki amaç;

  • Birden fazla node üzerinde işlemleri dağıtmanızı ve paralelleştirmeyi sağlar. Böylece performans artar.
  • İçerik hacmini yatay olarak bölme ve ölçeklendirmeye olanak tanır.

Replica

Shard’ın devre dışı kalması ihtimaline karşı index shardlarının bir veya birden çok kopyasının oluşturulabilmesini sağlayan replica-shard yapısı bulunur.

Bir sharda ait replica, aynı node’da barındırılmamalıdır. Bir node çöktüğünde o node’daki shardların yedeklerinin diğer nodelarda bulunması veri kaybını önlemek için şarttır. Shard ve Replica’ların farklı nodelara bölünmesinin örnek şeması Elastic Search’de Replica ve Shardların baştan belirlenmesi zorunluluğu yok. Ancak isteğe bağlı olarak ayarlayabilirsiniz.

--

--