Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Elasticsearch Nedir? Temel Kavramları Nelerdir?

Merhaba,

Bu içeriğimizde açık kaynak(open source) ve dağıtılmış(distributed) arama(search) ve analiz(analysis) moturu olan Elasticsearch üzerine teorik bir incelemede bulunacak, ne olduğu, nerelerde ne amaçla kullanıldığı gibi soruların cevaplarını arayacak ve bir yandan da temel kavramlarını masaya yatırmaya çalışıyor olacağız. O halde buyurun başlayalım…

Elasticsearch Nedir? Ne Amaçla Kullanılmaktadır?

Elasticsearch, büyük ölçekli veritabanlarında hızlı arama, analiz ve veri depolama işlemleri için kullanılan dağıtılmış bir arama ve analiz motorudur.

Elasticsearch, giriş paragrafında da bahsedildiği gibi büyük ölçekli veritabanlarında hızlı arama, analiz, veri depolama ve geri alma işlemleri için kullanılan, Apache Lucene kütüphanesine dayandırılmış, oldukça güçlü bir tam metin arama(full-text search) motorudur.

Elasticsearch, NoSQL tabanlı davranış sergilemekte ve verileri JSON formatında depolamaktadır. Bu veriler üzerinde yazımız boyunca detaylandıracağımız yapılandırılmış ve yapılandırılmamış sorgulama, gerçek zamanlı analiz, filtreleme vs. gibi kazanımları uygulamaktadır.

Elasticsearch, büyük miktardaki verileri shards adı verilen parçalara ayırmakta ve bu parçaları birden fazla sunuculara dağıtarak yüksek performans ve ölçeklenebilirlik sağlamakta ve böylece büyük verilere hızlı erişim ve yüksek kullanılabilirlik sağlamaktadır.

Elasticsearch’ün geniş bir kullanım alanı mevcuttur. Sadece bir arama motorundan ziyade aynı zamanda log analizi, metin madenciliği, veri görselleştirme, iş zekası ve gerçek zamanlı uygulama izleme gibi alanlarda da kullanılabilir. Ayrıca içerik sürecinde inceleyeceğimiz Kibana, Logstash ve Beats gibi diğer araçlar eşliğinde bir ELK(Elasticsearch, Logstash, Kibana) yığını oluşturarak güçlü bir log analizi ve görselleştirme platformu elde edilebilir.

Apache Lucene Nedir?

Apache Lucene, açık kaynak bir text search ve indeksleme kütüphanesidir. Verileri depolamak, indekslemek ve metin tabanlı aramaları gerçekleştirmek için kullanılır. İlk olarak 1999 yılında Doug Cutting tarafından geliştirilen Apache Lucene, günümüzde Apache Software Foundation bünyesinde geliştirilmekte ve yaygın bir şekilde kullanılmaya devam etmektedir.

Apache Lucene, metin tabanlı arama süreçlerinde bir indeks oluşturarak belgelerin içeriğini parçalara ayırmakta ve bu parçaları anahtar kelimelerine(term) dönüştürerek indekslemektedir. Bu indeksler metin tabanlı sorgulama süreçlerinde etkili bir şekilde arama yapılmasını ve hızlı bir şekilde de sonuçlara ulaşılmasını mümkün kılmaktadır.

Apache Lucene, metin işleme çeşitliliği açısından oldukça zengindir. Metin analizi, kelime köklerini bulma(stemming), eş anlamlı kelimelerin tanınması(synonym recognition), büyük/küçük harf duyarlılığı(case sensitivity), dil analizi(language analysis) vs. gibi özelliklerle metin işleme süreçlerinde işlevsellik gösterebilmekte ve böylece arama süreçlerinde daha doğru ve kapsamlı sonuçlar elde edilmesini sağlayabilmektedir.

Apache Lucene, Java programlama dili ile geliştirilmiş olmasına rağmen diğer programlama dilleriyle de entegre edilebilmekte ve özelleştirilmiş arama motorları, veri görselleştirme araçları, metin madenciliği vs. gibi bu ve bunlara benzer birçok metin tabanlı uygulamaları geliştirebilmemize olanak sağlamaktadır.

Apache Lucene, Elasticsearch arama moturunun temelini oluşturmakta ve güçlü bir arama ve indeksleme altyapısı sunmaktadır. Böylece Elasticsearch, Apache Lucene sayesinde daha kapsamlı bir dağıtılmış arama ve analiz platformu haline gelmiş bulunmaktadır.

Elasticsearch’ün Yetenekleri Nelerdir?

Elasticsearch, bünyesinde birçok yetenek ve özellik barındıran kapsamlı bir dağıtılmış arama ve analiz platformudur. Elasticsearch’ün belli başlı ana yetenekleri şunlardır;

  • Full-Text Search (Tam Metin Arama)
    Elasticsearch, güçlü tam metin arama yetenekleri ile metin tabanlı belgelerde hızlı ve etkili arama yapma imkanı sağlamaktadır.
  • Distributed and Scalable Search (Dağıtılmış ve Ölçeklenebilir Arama)
    Elasticsearch, verileri parçalar(shards) halinde bölerek ve bunları multiple nodes adı verilen yapılar üzerinde dağıtarak yüksek performans ve ölçeklenebilirlik elde etmemizi sağlamaktadır.
  • Real-Time Data Analysis (Gerçek Zamanlı Veri Analizi)
    Elasticsearch’ün gerçek zamanlı analiz yapabilme yeteneğiyle verilerinizi anlık olarak analiz edebilir ve sonuçlar elde edebilirsiniz.
  • Aggregations (Toplanan Veri)
    Elasticsearch, bir aramadan elde edilen sonuçları gruplandırma, özetleme ve analiz etme yeteneğine sahiptir.
  • Distributed Document Storage (Dağıtılmış Belge Depolama)
    Elasticsearch, JSON formatındaki belgeleri dağıtılmış bir şekilde depolayarak verilerin güvenliği sağlamakta ve hızlı erişim imkanı sunmaktadır.
  • Schema-Free (Şema Özgürlüğü)
    Elasticsearch, şema gereksinimleri olmadan verileri depolayabilir ve esnek bir şekilde çalışabilir.
  • Data Replication (Veri Kopyalama)
    Elasticsearch, veri yedekleme mekanizması ile replica(kopya) oluşturarak yüksek kullanılabilirlik ve veri kurtarma sağlamaktadır.
  • Built-in RESTful API
    Elasticsearch ile RESTful API’leri kullanarak kolay bir şekilde verilerinizi sorgulayabilir, ekleme, silme ve güncelleme yapabilirsiniz.
  • Scalable Analytics (Ölçeklenebilir Analitik)
    Elasticsearch, büyük veri kütlelerini hızlı ve ölçeklenebilir bir şekilde analiz edebilme yeteneğine sahiptir.
  • Geospatial Search (Coğrafi Arama)
    Elasticsearch ile coğrafi verileri depolayabilir ve coğrafi konum tabanlı aramalar yapabilirsiniz.

Bu yetenekler sayesinde Elasticsearch, verilerinizi hızlı bir şekilde indeksleyebilir, arayabilir, analiz edebilir ve gerçek zamanlı sonuçlar elde etmenizi sağlayabilir.

Elasticsearch Arama Motorunun(Search Engine) Operatif Yetenekleri Nelerdir?

Şimdi de Elasticsearch arama motorundaki operatif yeteneklerini masaya yatıralım. Elasticsearch arama motoru temel olarak aşağıdaki operatif yetenekleri barındırmaktadır;

  • Full-Text Search (Tam Metin Arama)
    Metin tabanlı belgelerdeki anahtar kelimeleri kullanarak hızlı ve etkili bir şekilde arama yapabilme yeteneğidir. Bu özellik, bir metin içinde geçen kelimeleri indeksleyerek verilere erişimi kolaylaştırır.

    Elasticsearch’in Full-Text Search özelliği aşağıdaki konuları kapsar;

    • Veri İndeksleme
      Elasticsearch, belgeleri indeksleyerek metin verilerini analiz eder ve içeriğin parçalara ayrılmasını sağlar. Bu süreçte, metin ve dil analizi gibi işlemler uygulanır. İndeksleme işlemi neticesinde metindeki kelimeler terimlere(terms) dönüştürülür ve bu terimlerin istatistiksel bilgileri tutulur.
    • Terim Eşleştirmesi
      Elasticsearch, arama sorgularını belgedeki terimlerle eşleştirir. Bir arama sorgusu girildiğinde, Elasticsearch terimlerin indekslerdeki konumunu bulur ve eşleşen belgeleri geri döndürür. Bu eşleştirme, tam metin arama sorgularını desteklerken aynı zamanda doğru sonuçları getirmek için indeksleme sürecinde yapılan analiz işlemlerini dikkate alır.
    • Relevant Sıralaması (Relevancy)
      Elasticsearch, full-text aramalarındaki sonuçları relevant(ilgili) sırasına göre düzenlemektedir. Arama sorgusuna göre sonucun eşleşme derecesini belirler ve sonuçları da bu dereceye uygun sırayla döndürür.
    • Metin Analizi
      Elasticsearch, metin analizi özellikleri sayesinde belgelerin içeriklerini daha iyi anlayabilmektedir. Metin analizi; kelime köklerini bulma(stemming), eş anlamlı kelimelerin tanınması(synonym recognition), büyük/küçük harf duyarlılığı(case sensitivity), dil analizi(language analysis) vs. gibi işlemleri içermektedir. Bu özellikler sayesinde kullanıcıların arama sorgularıyla daha doğru ve kapsamlı sonuçlara ulaşmalarını sağlar.
  • Querying (Arama Sorguları)
    Kullanıcıların istedikleri bilgilere ulaşabilmeleri için arama moturuna verilen talimatlardır. Elasticsearch, çeşitli sorgu tipleri ve özellikler sunmaktadır. Bunlardan bazıları şunlardır;

    • Match Query
      Belirli bir alanın, belirli bir değeriyle eşleşen belgeleri döndürmek için kullanılır. Örneğin; ‘title’ alanında ‘elma’ kelimesini içeren belgeleri getirmek istediğimizde Match Query’den istifade etmekteyiz.
    • Term Query
      Belirli bir alanda, belirli bir terimle tam olarak eşleşen belgeleri döndürmek için kullanılır.
    • Range Query
      Belirli bir alanın, belirli bir değer aralığında bulunan belgeleri döndürmek için kullanılır. Örneğin; ‘price’ alanı 10 ile 100 arasında olan belgeleri getirmek istediğimizde Range Query’den istifade etmekteyiz.
    • Bool Query
      Birden fazla sorguyu birleştirerek karmaşık mantıksal sorgular oluşturmak için kullanılır. Bool sorgusu, ‘must'(kesinlikle eşleşmeli), ‘should'(isteğe bağlı eşleşmeli) ve ‘must_not'(kesinlikle eşleşmemeli) bölümlerini içerebilir.
    • Match Phrase Query
      Tam cümle araması yapmak için kullanılır. Aranan ifadenin tamamını içeren belgeleri getirir. Örnek olarak; ‘sebepsiz boş yere ayrılacaksan’ cümlesini içeren belgeleri getirmek istediğimizde Match Phrase Query’den istifade edebiliriz.
    • Wildcard Query
      Joker karakterleri kullanarak belirli bir desene uyan belgeleri getirmek için kullanılır.
    • Aggregations
      Arama sonuçlarını gruplandırmak ve istatistiksel verileri elde etmek için kullanılır. Örneğin; belgeleri kategoriye göre gruplama ve her kategorinin ortalama fiyatını bulmak istiyorsak eğer Aggregations’dan istifade edebiliriz.
  • Filtering (Filtreleme)
    Arama sonuçları üzerinde istenmeyen sonuçları elemek amacıyla belirli kriterlere göre filtreleme işlemi için kullanılan özelliktir. Elasticsearch, aşağıdaki gibi bazı çeşitli filtreleme seçenekleri sunmaktadır;

    • Term Filter
    • Range Filter
    • Bool Filter
    • Exists Filter
    • Geo Distance Filter
  • Ranking (Sıralama)
    Arama sonuçlarını belirli bir kriter veya algoritma kullanarak, arama deneyimini iyileştirmek amacıyla önem sırasına göre düzenlemek için kullanılan bir yetenektir. Elasticsearch, aşağıdaki gibi çeşitli sıralama yöntemleri ve stratejileri sunmaktadır;

    • Relevance Ranking
      Elasticsearch, varsayılan olarak TF-IDF(Term Frequency-Inverse Document Frequency) tabanlı bir relevance sıralaması kullanmaktadır. Bu sıralama yöntemi, bir belgedeki terimin geçme sıklığına ve genel koleksiyondaki nadirliğine dayanır. Bu sayede, arama sorgusunun içerdiği terimlerin belgedeki önemini belirler.
    • Field-Based Ranking
      Belirli bir alanın değerine veya skoruna göre sıralama yapma imkanı sunan yöntemdir. Misal olarak; fiyat alanına göre artan yahut azalan şekilde sıralama bu yöntemle gerçekleştirilebilir.
    • Geo Ranking
      Coğrafi konum bilgilerini kullanarak, belirli bir konuma göre sıralama yapmayı sağlar. Örneğin; kullanıcının mevcut konumuna en yakın noktalardan başlayarak sıralama yapabilir.
    • Time-Based Ranking
      Belirli bir zaman aralığı veya tarihe göre sıralama gerçekleştirilebilir. Misal olarak; en son güncellenen veya en yeni belgeler üst sıralara taşınabilir.
    • Custom Ranking
      Elasticsearch, kullanıcının kendi sıralama mantığını uygulayabilmesi için özel sıralama stratejileri oluşturmasına olanak tanır. Bu, belirli kriterlere dayalı olarak özel bir puanlama veya sıralama algoritması kullanılmasını sağlar.
  • Autocomplete (Otomatik Tamamlama)
    Kullanıcılara arama yaparken istedikleri terimi veya ifadeyi hızlı bir şekilde tamamlama ve öneriler sunma yeteneğidir. Bu özellik sayesinde, kullanıcıların doğru terimleri hatırlamalarına veya tamamlamalarına yardımcı olarak arama süreci hızlandırılmakta ve kullanıcı deneyimi iyileştirilmektedir. Elasticsearch, otomatik tamamlama özelliğini gerçekleştirmek için aşağıdaki gibi çeşitli yöntemler sunmaktadır;

    • Completion Suggester
      Elasticsearch, completion suggester adı verilen özel bir veri yapısı ve sorgu tipi kullanarak otomatik tamamlama işlevselliği sağlamaktadır. Bu yöntemde, tamamlanacak terimlerin bir ‘tamamlama alanı’ içinde saklanması gerekir. Kullanıcı her karakter girdiğinde, Elasticsearch bu alanı tarar ve kullanıcıya olası tamamlama önerileri sunar.
    • Fuzzy Matching
      Elasticsearch, otomatik tamamlama sırasında karater tabanlı benzerlik eşleştirmesi yapabilen fuzzy matching(bulanık eşleştirme) özelliğini de desteklemektedir. Bu sayede, kullanıcının yanlış yazılan veya hatalı karakterler içeren terimlere rağmen doğru tamamlama önerileri alması sağlanır.
    • Contextual Suggestions
      Elasticsearch, kullanıcının arama bağlamına bağlı olarak öneriler sunabilme yeteneğine sahiptir. Örneğin; kullanıcı bir kategori seçtikten sonra sadece o kategoriye ait tamamlama önerilerini göstermek gibi…
    • Öneri Sıralama
      Elasticsearch, tamamlama önerilerini belirli bir sıralama kriterine göre düzenleme imkanı sunmaktadır. Örneğin; popülerlik, alfabetik sıralama veya özel bir sıralama mantığına göre sıralama yapılarak otomatik tamamlama gerçekleştirilebilir.
  • Spell Correction (Doğru Yazım Düzeltme)
    Elasticsearch’te spell correction, kullanıcıların hatalı veya yanlış yazılmış kelimeleri otomatik olarak düzeltmelerine olanak tanıyan bir özelliktir. Böylece bu özellik, kullanıcıların doğru yazımı hatırlamalarına veya hatalı yazılan kelimeleri düzeltmelerine yardımcı olur. Bu özellik için Elasticsearch’de kullanılan bazı yöntemler aşağıdaki gibidir;

    • Fuzzy Matching (Bulanık Eşleştirme)
      Autocomplete özelliğinde olduğu gibi spell correction özelliğinde de hatalı yazılmış kelimeleri düzeltmek için fuzzy matching algoritması kullanılabilmektedir. Bu algoritma ile kelimenin benzerlik derecesine göre düzeltilmiş bir versiyonu önerilebilir. Örneğin; ‘housse’ yerine ‘house’ kelimesini önerebileceği gibi…
    • Distance-Based Approaches (Mesafe Tabanlı Yaklaşımlar)
      Elasticsearch, hatalı yazılmış kelimenin doğru yazımını bulmak için distance-based metrikleri kullanabilir. Levenshtein Mesafesi veya Damerau-Levenshtein Mesafesi gibi yöntemler kullanılarak hatalı yazılan kelimenin doğru yazıma en yakın olanını seçer.
    • Dictionary-Based Approaches (Sözlük Tabanlı Yaklaşımlar)
      Elasticsearch, bir kelime sözlüğü veya sözcük listesi kullanarak doğru yazımları kontrol eder. Hatalı yazılmış kelimenin sözlükteki bir kelimeyle eşleştiği durumlarda düzeltme yapar. Bu yöntem, önceden belirlenmiş bir kelime listesini kullanır ve doğru yazımları belirli bir kaynaktan alır.
    • Customization (Özelleştirme)
      Elasticsearch, kullanıcıların kendi doğru yazım düzeltme kurallarını veya sözlüklerini tanımlamalarına izin verir. Bu şekilde, kullanıcılar hedef kitlelerine veya belirli kullanım senaryolarına uygun düzeltmeler yapabilir.
  • Indexing (İndeksleme)
    Elasticsearch’de indexing özelliğini, verileri Elasticsearch’e kaydetme ve bu verilerin etkili bir şekilde aranabilir ve erişilebilir hale gelmesi için indekslenmesi olarak düşünebilirsiniz.
  • Faceted Search
    Kullanıcılara arama sonuçlarını daha iyi anlamaları ve istedikleri sonuçlara daha hızlı ulaşabilmeleri için arama sonuçlarını filtrelemek ve kategorize edebilmelerine olanak sağlayan yapılandırılmış bir arayüz sağlar.

Elasticsearch Stack Nedir?

Elasticsearch Stack, Elasticsearch’ü temel alarak oluşturulan ve Elasticsearch’ün yeteneklerini genişletmek için onun çevresinde konuşlandırılmış farklı bileşenlerden bir bütünü ifade eden temel kavramdır. Bu bütünün içerisinde; verilerin toplanması, işlenmesi, depolanması, görselleştirilmesi ve yönetimi gibi farklı alanlarda işlevselliği artırmak için türlü bileşenler mevcuttur.

Elasticsearch Stack’in temel bileşenleri; Elasticsearch’ün ta kendisi olmakla beraber, Kibana, Logstash, Beats ve Elasticsearch Machine Learnin olmak üzere beş adettir diyebiliriz. Şimdi bu bileşenleri tek tek izah etmemiz gerekirse eğer;

Elasticsearch Kibana Logstash Beats Elasticsearch Machine Learning
Elasticsearch, Stack’in merkezi bileşenidir ve dağıtık bir arama ve analiz motoru olarak görev yapmaktadır. Kibana, Elasticsearch ile etkileşimli görselleştirmeler ve veri analizi sağlayan bir kullanıcı arayüzüdür. Verileri görselleştirme, raporlama, anlık durum panoları oluşturma, etkileşimli analiz yapma vs. gibi yetenekleri mevcuttur. Logstash, farklı kaynaklardan gelen verileri alıp, dönüştürüp, Elasticsearch’e göndermekten sorumludur. Genellikle adı üzerinde log dosyalarındaki verileri toplamakta kullanılır. Hafif veri işleme ajanlarıdır ve çeşitli veri kaynaklarından beslenerek; sistem logları, metrikler, ağ verileri vs. gibi verileri toplamakta ve Logstash’e veya direkt Elasticsearch’e aktarırlar ve böylece veri toplama ve gönderme sürecini basitleştirirler. Elasticsearch üzerinde makine öğrenimi modelleri oluşturmayı ve anormallikleri tespit etmeyi sağlayan bir bileşendir.

Elasticsearch Mimarisini İnceleyelim

Elasticsearch, dağıtık bir arama ve analiz motoru olduğu için veri depolama, veri dağıtımı ve yüksek kullanılabilirlik gibi temel özelliklere yönelik bir mimariye sahiptir ve aşağıdaki gibi atomik iş yürüten bileşenlerden meydana gelmektedir. Şimdi gelin mimarideki bu bileşenleri tek tek inceleyelim;

  • Cluster
    Elasticsearch mimarisinin en üst düzey birimidir. Bir cluster, birden çok Elasticsearch node’undan meydana gelmektedir. Her bir node, verileri depolama ve sorgulama yeteneğine sahiptir.

    Cluster; yüksek kullanılabilirlik, veri dağıtımı ve yük dengelemesi sağlamak için node’lar arasında işbirliği yapar. Ayrıca her cluster, benzersiz bir ad ve bir veya daha fazla index içerebilir.

  • Node
    Elasticsearch cluster’ın her bir parçasına verilen isimdir. Bir cluster, birden çok node’dan meydana gelebilir. Her node; document’leri index’ler, sorguları gerçekleştirir ve diğer node’lar ile iletişim kurar.

    Node’lar, verilerin parçalara bölünmesini ve dağıtılmasını sağlar. Her node, bir veya daha fazla shard’a sahip olabilir ve shard’lar da node’lar arası paylaştırılır.

  • Shard
    Elasticsearch’de depolanan veriler, shard adı verilen parçalara bölünür. Shard’lar, verilerin daha hızlı index’lenmesini, sorgulanmasını ve dağıtılmasını sağlar. Her shard, tamamen bağımsız bir Lucene index’i olarak depolanan document alt kümesini içerir. Bir index, bir veya daha fazla shard’a bölünebilir. Shard’lar, cluster’da ki farklı node’lara dağıtılır ve veri dağılımını paralel olarak işleyerek performansı artırır.
  • Replica
    Elasticsearch, veri güvenilirliğini ve yüksek kullanılabilirliği sağlamak için her bir shard’ın bir veya daha fazla kopyasını/replica tutabilmektedir. Replica’lar, shard’ların otomatik olarak dağıtılmasıyla oluşturulur. Bir shard’ın, bir veya daha fazla kopyası olması, sistemdeki olası veri kaybı durumunda yedekleme ve kurtarma sağlar.
  • Index
    Elasticsearch’de verilerin mantıksal bir birimi olan index, document’lerin toplandığı ve organizasyonlandığı fiziksel birimdir. Her index, bir veya daha fazla shard’dan veya shard kopyasından oluşur. Burada, document’lerin tipini, alanlarını ve index’leme konfigürasyonlarını tanımlamak için bir mapping(eşleme) yapısı kullanılır.

    Her index’in benzersiz bir adı vardır.

  • Document
    Elasticsearch’de veriler document’lere dayanır.
  • Query
    Elasticsearch, kullanıcıların verileri sorgulaması ve araması için çeşitli sorgu tiplerini desteklemektedir. Kullanıcılar; tam metin aramaları, filtrelemeler, eşleşen terimler, aralık sorguları, mantıksal operatörler ve daha fazlasını içeren karmaşık sorgular oluşturabilirler. Sorgular, belirli bir index’teki document’lerin belirli kriterlere göre eşleştirilmesini ve sıralanmasını sağlar.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

6 Cevaplar

  1. Adil dedi ki:

    Guzel konu icin tesekkurler.

  2. İsrafil dedi ki:

    Böyle Bir Çok Konuda Bilgiler Paylatığın İçin Teşekkür Ederim. Umarım Daha Fazla Konu Ve Güncel İçeriklerle Devam Edersiniz

  3. Eyüp Kahraman dedi ki:

    Konu gayet iyi açıklanmış. Bir RestFull API için örneği gelirse tadından yenmez. 🙂

  4. Halil İbrahim Dişli dedi ki:

    Harika bir içerik olmuş hocam. Emeğinize sağlık, çok teşekkür ederim.

  5. İlker Yiğit dedi ki:

    Teşekkürler

  6. Furkan dedi ki:

    Elinize sağlık hocam

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir