Elasticsearch nedir?

Rahim Komaç
3 min readMar 26, 2024

--

Bu makalede ilk önce Elasticsearch’ün tanımından başlayacağız. Sonrasında nasıl çalıştıgı konusuna değineceğiz. Docker ile Elasticsearch üzerinde index oluşturma, veri ekleme ve arama konularından bahsedip PHP ve GO ile bazı örnekler yaparak kendi projelerimizde nasıl kullanacagımızdan bahsedeceğiz.

-> Elasticsearch Nasıl Çalışır?

-> Elasticsearch’ü Docker üzerinde çalıştırma

-> Elasticsearch ile Index Oluşturma ve Arama

-> PHP ve GO ile Elasticsearch kullanımı

Elasticsearch Nedir?

Bu tanımı zaten bir çok yerde duymuş olabilirsiniz. Elasticsearch; Java dilinde geliştirilen dağıtılmış, gerçek zamanlı bir arama ve analiz motorudur. Güçlü arama yetenekleri sunarak kullanıcıların büyük hacimli verileri neredeyse gerçek zamanlı sonuçlarla indekslemesine ve sorgulamasına olanak tanır. JSON belgeleri üzerinde hızlı arama, analiz ve veri görselleştirme yetenekleri sunar. Apache Lucene projesini temel almaktadır.

Lucene projesi daha çok yapılandırılmamış düz metinlerin indexlenmesi ve aranmasını sağlamaktadır. Elasticsearch ise Lucene üzerine yapılandırılmış, veri yapısı belli dokümanların indexlenmesi ve aranabilmesini sağlamaktadır.

Her ne kadar alttaki asıl işi Lucene yapsa da, Elasticsearch bize Lucene üzerinde uygun bir katman sağlar. Lucene’yi kendi arama motorunuzu oluşturmak için de kullanabilirsiniz. Kısaca Elasticsearch, Lucene üzerine kurulmuştur ve Lucene özelliklerine atıfta bulunmak için JSON tabanlı bir REST API sağlayan açık kaynaklı bir uygulamadır.

Elasticsearch Temel Kavramlar

Nasıl çalıştığını anlatmadan önce temel kavramları ele almak gerekir. Aksi takdirde temelsiz bir anlatım olacaktır.

Node (Düğüm):

  • Data Node (Veri Düğümü): Verilerin saklandığı düğümdür. Veri düğümleri, dizinlenmiş ve aranabilir hale getirilmiş belgeleri barındırır.
  • Master Node (Ana Düğüm): Elasticsearch kümesinin yönetiminden sorumlu olan düğümdür. Yeni düğümlerin katılımını yönetir, küme durumunu izler ve otomatik düğüm yeniden dağıtımını sağlar.

Cluster (Küme):

Bir veya daha fazla Elasticsearch düğümünün bir araya gelerek oluşturduğu bir kümedir. Küme, yüksek erişilebilirlik, veri yedekleme ve dağıtık hesaplama sağlar.

Index (İndeks):

Elasticsearch’te verilerin saklandığı temel yapı birimidir. Bir indeks, belirli bir türdeki belgelerin depolandığı mantıksal bir veri koleksiyonudur.

Shard (Parça):

  • Primary Shard (Birincil Parça): Belirli bir indeksteki verilerin orijinal kopyasını barındıran parçadır.
  • Replica Shard (Yedek Parça): Primary shard’ın yedek kopyasını içerir ve veri yedekleme ve yüksek kullanılabilirlik sağlar.

Document (Belge):

Elasticsearch’te saklanan temel veri birimidir. Belge, JSON formatında bilgi içerir ve indekslenerek aranabilir hale getirilir.

Query (Sorgu):

Elasticsearch API’si aracılığıyla verileri aramak ve filtrelemek için kullanılan yapıdır. Farklı sorgu türleri (örneğin, arama sorguları, filtre sorguları, kümelenme sorguları) Elasticsearch’in esnek arama yeteneklerini destekler.

Analyzer (Analizör):

Elasticsearch’te metin analizi ve indeksleme işlemleri için kullanılan yapıdır. Analizörler, metin verilerini parçalara ayırma, küçük harfleme, sembollerin kaldırılması gibi işlemleri gerçekleştirir ve daha etkili arama sonuçları elde edilmesini sağlar.

Mapping (Eşleme):

Belge tipi ve alanların veri yapılarını tanımlayan yapıdır. Eşleme, belgelerin nasıl indeksleneceği ve aranacağı konusunda Elasticsearch’e bilgi sağlar.

İndexleme aşamasında veri tiplerini de anlamamız öndemlidir.

Veri Tipleri

  • Text ve Keyword: Text veri türleri, tam metin aramaları için özel olarak hazırlanmıştır. İndeksleme aşamasında analiz edilirler ve bu sayede kelimelere veya belirteçlere ayrıştırılırlar. Bu özellikleri, tam metin sorgularını başarıyla çalıştırmak için ideal hale getirir. Örnegin: ürün isimleri, blog postlar, başlıklar vs.
  • Keyword ise özel bir veri türünü temsil eder, analiz süreçlerine dahil edilmezler. Dogrudan kaydedilirler. Örnek olarak e-posta, telefon numarası, özel isimler, banka adı vs. Kısacası dogrudan eşleşmesini istedigimiz alanları keyword veri türünde saklamalıyız.
  • Boolean: Bu veri türü doğru/yanlış değerleri için kullanılır. Örnek: is_active, has_payment, in_stock vs.
  • Date: Tarih ve saatler için kullanılan veri türüdür. Yapısal olarak yapılandırılmış text türündedir. Analiz edilmez ve parçalanmazlar. Varsayılan olarak y-m-d formatındadir. Uygun bir formatda gönderilmez ise yani d-m-y gibi bir formatda gönderilir ise elasticserach bunu keyword olarak belirleyebilir. Bu durumda zamana dayalı büyük, küçük gibi sorgular yapılamayacaktır.
  • Numeric: Sayısal veri türleridirler. Tam sayılar için integer/short/long/byte, ondalıklı sayılar için float/double veri türlerini destekler.

Bu veri türleri dışında Object, Array, Nested, Geo data types vs karmaşık veri türleri de desteklenmektedir, ancak şimdilik bu veri türlerine girmeye gerek yok.

Sonraki yazımızda Elasticsearch’ün nasıl çalıştığını, indexleme işleminin nasıl gerçekleştiğini inceleyeceğiz.

-> Elasticsearch Nasıl Çalışır?

--

--