ElasticSearch Nedir? Neden Kullanılır?

Ertan Çelik
alBarakaTech Global
6 min readFeb 1, 2021

Merhaba arkadaşlar bugün sizlere ElasticSearch’den bahsedeceğim. Ama öncesinde ElasticSearch nasıl ihtiyaç haline geldi biraz onlara değinelim.

Neden ElasticSearch?

Tabi ElasticSearch hakkında konuşmaya başlamadan önce, bazı diğer terimleri açıklamamız gerekiyor. Büyük Veri (Big Data) gibi!

Büyük Veri, şirketleri her gün boğan, hem yapılandırılmış (structured) hem de yapılandırılmamış (unstructured) büyük miktarda veriyi tanımlamak için kullanılan terimdir. Büyük Verinin karmaşıklığı temel olarak, web günlükleri, cihazlara dahil edilen sensörler, internet aramaları, sosyal ağlar (Facebook, Twitter vb.), dizüstü bilgisayarlar, akıllı telefonlar vb. gibi modern sistemler ve teknolojiler tarafından sürekli olarak üretilen büyük miktarda yapılandırılmamış veriden kaynaklanmaktadır.

Ancak önemli olan veri miktarı değil, bu verilerle ne yapılacağıdır. Yeni fırsatları belirlemek, daha iyi kararlar almak ve başarılı iş stratejileri hazırlamak için onu analiz edebilmek önemlidir. Bu da daha akıllı iş hareketlerine, daha verimli operasyonlara, daha yüksek karlara ve daha mutlu müşterilere yol açar. Tabi ki hız da çok önemlidir. Analiz ve arama sonuçlarını olabildiğince hızlı alabilmeniz gerekir. Bir haftalık bir rapor kimseye yardımcı olmuyor maalesef.

Giderek karmaşıklaşan bilgi toplumumuzda, tonlarca bilgi arasında gezinmek gerçekten karmaşık hal alabiliyor. Günümüzde bilgiye duyulan ihtiyaç da giderek önemli olmaya başladı. Her türlü bilgiye erişim artık sadece birkaç tıklama ile yapabilmek mümkün.

ElasticSearch bize tam olarak bu görevde yardımcı oluyor. “ Buğdayı ,büyük veri adı verilen bu muazzam ahırın içinde samanlıktan ayırmak ve okunabilir ve düzenli bir şekilde göstermek”

Şimdi, ElasticSearch’ün tüm bunları başarmamıza nasıl yardımcı olduğunu görelim.

ElasticSearch Nedir?

ElasticSearch Java dilinde yazılmış, açık kaynak (open-source) olarak geliştirilmiş ve ölçeklenebilir (scalable), full text search tabanlı bir arama motoru (search engine) dur.

Kısacası büyük verilerin içerisinde gezinmek, arama yapmak, listelemek oldukça zaman aldığı ve yavaşlamaya neden olduğu için ortaya atılmış bir çözüm yöntemidir. Büyük verileri olan birçok firma (Netflix, Slack, Uber, LinkedIn, Amazon vb.) tarafından kullanılmaktadır. Apache Lucene altyapılıdır. Verileri gerçek zamanlı analiz etmeyi sağlar.

ElasticSearch RestfulAPI üzerinden hizmet vermekte, 3.part görsel araçları ve güvenlik seçenekleri ile çok hızlı ve kullanışlıdır. RestfulAPI üzerinden hizmet verdiği için tüm programlama dilleri (Curl, C#, GO, Java, JavaScript, Perl, PHP, Python, Ruby, SQL) ile kullanılabilmektedir. Hem Windows hem de Linux’da kolayca çalışabilir.

Gerçek zamanlı (real time) ve dağıtık (distributed) çalışabilmesinin yanında çok güçlü ve esnek bir yapıya sahiptir. Bu yüzden de tercih sebebidir. Biraz daha yakından bakmak istersek bazı teknik konulara hakim olmamız gerekmektedir.

Teknik konulara geçmeden sık kullanılan kavramlardan biraz bahsedelim.

Elastic Search Bileşenleri:

Küme(Cluster): Tüm verilerinizi bir arada tutan ve tüm düğümlerde birleşik dizin oluşturma ve arama yetenekleri sağlayan bir veya daha fazla düğümden (sunucu) oluşan bir koleksiyondur.

Düğüm(Node): Kümenizin parçası olan, verilerinizi depolayan ve kümenin indeksleme ve arama yeteneklerine katılan tek bir sunucudur.

Dizin(Index): İlişkisel bir veritabanına eşdeğerdir.

Tür(Type): Bir dizin eşlemesinin depolandığı Elasticsearch meta nesnesidir.

Alias: Elasticsearch indeksine bir referanstır.

Belge(Document): Bir belge, dizine eklenebilen temel bir bilgi birimidir. Bu belge, JavaScript Object Notation (JSON) biçiminde ifade edilmiştir.

Parçalar ve Kopyalar(Shards and Replicas): Elasticsearch, dizininizi kırık adı verilen birden çok parçaya ayırma yeteneği sağlar. Bir dizin oluşturduğunuzda, istediğiniz parça sayısını kolayca tanımlayabilirsiniz. Her bir parça, kümedeki herhangi bir düğümde barındırılabilen, kendi içinde tam işlevli ve bağımsız bir “dizindir.

Rest API: ElasticSearch’ün en önemli özelliklerinden bir tanesi de esnek ve güçlü bir yapıya sahip olan REST mimarisi üzerine kurulu olmasıdır. Esnek ve lightweight pipeline’ı sayesinde kolaylıkla HTTP protokolü üzerinden JSON gönderilip alınabilmektedir.

Peki Elasticsearch ile text aramaları nasıl yapılır?

Elasticsearch, metni doğrudan aramak yerine, bunun yerine bir dizin aradığı için hızlı arama yanıtları sağlayabilir. Bu, kitabın her sayfasındaki her kelimeyi aramak yerine, kitabın arkasındaki dizini tarayarak bir anahtar kelimeyi aramak gibidir. ElasticSearch binlerce sunucuya kadar ölçeklenebilir ve petabaytlarca veriyi barındırabilir. Muazzam kapasitesi doğrudan ayrıntılı ve dağıtılmış mimarisinden kaynaklanmaktadır.

Veriler JSON formatında tutulur ve ismi NOSQL yapılarla beraber anılır. JSON formatında veri tuttuğu için REST full API’lere hizmet verir.

Bir REST API aracılığıyla, tüm iş zekası, büyük veri veya iş analitiği uygulamalarınızı desteklemek için erişilebilir ve genişletilebilir.
ElasticSearch, birden çok veri kaynağından bilgi almanıza izin veren çeşitli bağlayıcılara ve eklentilere sahiptir: Günlük dosyaları, veritabanları, işletim sistemleri, uyarı izleme vb.

.Net teknolojileri ile uygulama geliştiriyorsanız NuGet kütüphanelerinden NEST ve Elasticsearch.net kütüphanelerini kurarak bu arama motorunu uygulamanıza entegre edebilirsiniz. Bu yazımız bilgi amaçlı olduğu için detaylarına girilmeyecektir.

Elasticsearch’e bir veri kaydettiğimiz zaman, veri içerisinde belirleğimiz alanlar Apache Lucene altyapısı kullanılarak indexlenir. Elasticsearch bir kelimenin hangi dökümanda(row) 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 alttaki dökümanda “global” kelimesini aramak istediğimizde, index listesi üzerinden hızlıca 1,4,5 sonuçlarını elde ederiz.

ElasticSearch’ün Avantajları

Ölçeklenebilirlik (Scalability of the search engine)

ElasticSearch ölçeklendirmek için tasarlanmıştır. Dilediğiniz özellikteki makinada ve dizin boyutunda çalıştırabilirsiniz. Çeşitli miktarda aramayı eşzamanlı olarak yönetebilmenize izin verir.

Hızlı Performans (Fast access)

ElasticSearch, dağıtılmış indeksleri kullanarak çok büyük veri kümelerinden bile tam metin aramalarınız için en iyi eşleşmeleri hızla bulur.

Kolay Kullanım (Easy Use)

Kullanıcısına gerçek zamanlıya yakın arama imkanı sunan, büyük verilerin optimizasyonunu kısa süre içerisinde gerçekleştiren ve sağladığı REST API’leri sayesinde rakiplerine göre oldukça kolay bir şekilde kullanılabilen ElasticSearch kolay konfigürasyon vadeder.

ElasticSearch Mimarisi

Biraz da ElasticSearch mimarisine değinelim.

Elastic Stack, üç açık kaynaklı ürünün bir kombinasyonu olan ELK Stack olarak başladı: Elasticsearch, Logstash ve Kibana. Beats, ELK Stack’e eklendiğinde Elastic Stack olarak yeniden adlandırıldı.

Kibana

Elasticsearch için gerçek zamanlı histogramlar, çizgi grafikler, pasta grafikler ve haritalar sağlayan bir veri görselleştirme ve yönetim aracıdır. Elasticsearch verilerinizi görselleştirmenizi ve Elastic Stack’ta gezinmenizi sağlar. Etkileşimli görselleştirmenin sizi nereye götüreceğini öğrenmek için tek bir soruyla başlayarak verilerinize şekil verme şeklinizi seçebilirsiniz. Örneğin, Kibana genellikle günlük analizi için kullanıldığından, web isabetlerinin nereden geldiği, dağıtım URL’leriniz vb. Hakkındaki soruları yanıtlamanıza olanak tanır. Elasticsearch’ün üzerine kendi uygulamanızı oluşturmuyorsanız, Kibana, güçlü ve esnek bir kullanıcı ara yüzü ile dizininizi aramak ve görselleştirmek için harika bir yoldur.

Logstash

Logstash, verileri toplamak, işlemek ve Elasticsearch’e göndermek için kullanılır. Çok sayıda kaynaktan aynı anda veri alan, dönüştüren ve daha sonra toplamak için gönderen açık kaynaklı, sunucu tarafı veri işleme hattıdır. Ayrıca, yapı oluşturmak için adlandırılmış alanları tanımlayarak ve bunları ortak bir formatta yakınsamak için dönüştürerek verileri formattan bağımsız olarak dönüştürür ve hazırlar. Örneğin, veriler genellikle farklı sistemlere çeşitli biçimlerde dağıldığından, Logstash web sunucuları, veritabanları, Amazon hizmetleri vb. Gibi farklı sistemleri birbirine bağlamanıza ve verileri sürekli akış şeklinde gitmesi gereken her yere yayınlamanıza olanak tanır.

Beats

Beats, yüzlerce veya binlerce makineden ve sistemden Logstash veya Elasticsearch’e veri göndermek için kullanılan hafif, tek amaçlı veri nakliye acentelerinden oluşan bir koleksiyondur. Beats, sunucularınızda, konteynerlerinizle birlikte oturabilecekleri veya işlev olarak dağıtıldıktan sonra verileri Elasticsearch’te merkezileştirebilecekleri için veri toplamak için harikadır. Örneğin, Filebeat sunucunuzda oturabilir, günlük dosyalarını geldiklerinde izleyebilir, ayrıştırabilir ve neredeyse gerçek zamanlı olarak Elasticsearch’e aktarılabilir.

İ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.

C#

Python

ÖZETLE

Elasticsearch nedir? Bu yazıda, bu sorunun cevabının ne olduğunu, nasıl çalıştığını ve nasıl kullanıldığını anlamaya ve cevaplamaya çalıştık. Hala onunla ilgili her şeyi öğrenmenin zorluğunu hissediyor olabilirsiniz. Ancak ele aldıklarımıza dayanarak, ElasticSearch’ün özünde, temel mimarisi ve bileşenleri onu hızlı ve ölçeklenebilir kılan, birlikte kullanılabilecek tamamlayıcı araçlardan oluşan bir ekosistemin kalbinde yer alan bir arama motoru olduğunu kısaca özetleyebiliriz. Arama, analiz ve veri işleme ve depolama dahil birçok kullanım durumu. Elasticsearch hakkında daha fazla bilgi edinmek ve kendiniz denemekle ilgileniyorsanız, buradan başlayabilirsiniz.

Mutlu aramalar :)

--

--