ElasticSearch Kullanımı
Husamettin Elalmis
Merhaba arkadaşlar, bu yazıda sizlere ElasticSearch kullanımından bahsedeceğim,
ElasticSearch Nedir?
ElasticSearch, Lucene alt yapısı üzerine kurulmuş, Java programlama dili ile open-source olarak geliştirilmiş, ölçeklenebilir, full text search tabanlı bir search engine dir.
Elasticsearch, verileri JSON tipinde saklar.
Elasticsearch üzerinde verilerimizi indexlerken, ilgili dokümanın yanı entitynin her propertysini indexlememeliyiz. ElasticSearch sadece search işlemlerimizi hızlı bir şekilde yapabilmemizi sağlayan bir araçtır, veritabanı değildir.
Tarihçesi
En populer search engine sistemlerinden olan Lucene zamanında sıkça kullanılmıştır.
Lucene versiyonu 1.x vardı o zamanlar, seneler önce Dış İşleri Bakanlığı .Net projesinde bizzat arama işlemlerinde kullanılıyordu, ana sayfada tüm personel üzerinde arama yapmak için kullanılıyordu. Oldukça performanslıydı.
Daha sonrasında 2.x versiyonu çıktı, tüm namespace ve komutlar tamamen değişti. Eski lucene ve yeni lucene olmak üzere ayrı ayrı kullanılmaya başlandı.
Lucene implementasyonu, MSSQL queryler üzerine yapılandırılan indexleme motoru idi. Lucene, kendi başına çalışan bağımsız bir framework kütüphanesidir. Query bazında hangi alanların indexleneceğini filan belirtiyorduk.
Lucene alt yapısı üzerine kurulmuş olan ElasticSearch, günümüzde son versiyonu 7.x olarak kullanılmaktadır.
7.x ve öncesi tüm namespaceler ve komutlar tamamen farklıdır.
7.x ve sonrası tüm namespaceler ve komutlar tamamen farklıdır.
Hangi sürümde ElasticSearch yapılandırılacağı bu yüzden önemlidir. Eski kodlar yeni sistemlerde Refactoringe gitmek zorundadır.
Lucene olsun, ElasticSearch olsun, milyon satırdan oluşan indexlenmiş yapılarda çok hızlı result alınmasını sağlamaktadır. Lucene zamanında bunu gözümle gördüm teyid ettim. Normal şartlarda çalıştırılan sql querylerden kat ve kat daha hızlı response veriyor idi. ElasticSearch'de bu durumu henüz deneyimlemedim, bu konuda henüz bir çalışmam olmamıştır.
Nerelerde Kullanılabilir?
Milyon satırlık log dosyalarında arama yapan sistemlerde kullanılabilir
Milyon satırlık TCKimlik sorgulama işlemlerinde kullanılabilir.
Coğrafi bilgi sistemleri yapılarında kullanılabilir (koordinat sistemleri, yer bulma, konum bulma, area-bölge bulma vb. data search işlemleri)
Bu ve buna benzer "hızlı ara ve bul" senaryosuna ilişkin heryerde kullanılabilir.
İçişleri Bakanlığı projesinde şu an aktif olarak Log verilerinin indexlenmesinde kullanıldığı görülmüştür.
Yararlanılan Kaynaklar
Kurulum
Elasticsearch.bat çalıştırıldığında bu şekilde console görünür, uygulamamız boyunca bu açık kalmalıdır.
Terminoloji
Veritabanı ile Elasticsearch terimlerini birbirine benzetirsek şöyledir,
Database => Index
Table => Type
Row => Document
Column => Field
Schema => Mapping
Örnek Proje Yapısı
Elasticsearch, nugetpackage olarak kurulur. 7.x sürümünü kurdum.
Dummy Data Hazırlanması
ElasticSearchArge dbsi oluşturdum.
t_Rehber isimli tablo oluşturdum
ArksoftUI tool aracı Randomizer kullanarak 1000 adet t_Rehber tablosuna uygun olacak rastgele veri ürettim
ArksoftUI tool aracı Tilda kullanarak dumy data kümesinden insert scripti ürettim
Oluşturulan insert scriptini MSSQLde run ettim
1000 adet veri seti t_Rehber tablosunda mevcut.
AppDbContext.cs
t_Rehber.cs
Program.cs
CreateIndex çıktısı
UI üzerinden sorgulama yapılabilmektedir
PerformSearch01 çıktısı
Perform02 çıktısı
Sonuç
Elasticsearch, son derece hızlı query yapabilmektedir. Dönüş hızları, normal db querylerinin çok üzerindedir.
Elasticsearch, başlı başına bir araçtır. Üzerinde çalışmayı ve uzmanlaşmayı gerektirir. Kullanılabilecek daha bir çok arama kriteri, boost ayarları, analizler vb. gibi işlevleri vardır.
Syntax dili karmaşıktır, ilk etapda zorluk çekilebilir, sonrasında mantığı kavranırsa kodlama tarafı da hızlanır.
Belki bir gün bir şekilde işimiz düşer kullanırız, belli olmaz
Saygılarımla,
Hüsamettin ELALMIŞ – 28.06.2021
husamettin.elalmis@arksoft.com.tr
Last updated