Yazı hakkında bir yorum bırakmak için tıklayın.
Bu yazıya sizde katkıda bulunabilirsiniz.
Elasticsearch’e yeni başlayanlar için hızlı ve rahat bir başlangıç yapmalarını sağlayacak araçlardan biraz bahsetmek istiyorum ve bu arada da kısaca Elasticsearch (ES kısaltması ile devam edeceğim) hakkında bilgi vermeye çalışacağım.
Elasticsearch wikipedia’da bahsedildiği üzere Lucene tabanlı bir arama sunucusudur. Genel bilinmesi gerekenler:
Elasticsearch kurulumu ve çalıştırılması hakkında buradan bilgi alabilirsiniz. Ben genel olarak kurulumdan bahsetmeyeceğim. Elimden geldiğince ES’i daha hızlı nasıl öğrenirsiniz ve çalışma ortamınızı nasıl hızlıca kurabilirsiniz bundan bahsedeceğim.
Elasticsearch’de verilerin tutulduğu index‘ler
vardır. Bunları ilişkili bir veritabanındaki database
ler gibi düşünebilirsiniz.
Indexler içerisinde farklı tipteki verileri tutabilmeniz için type
kavramı
vardır bunu da tablolar gibi düşünebilirsiniz. Aralarındaki ilişkiyi daha rahat
anlamak için aşağıdaki açıklamaya bakabilirsiniz.
MySQL => Databases => Tables => Columns/Rows
Elasticsearch => Indices => Types => Documents with Properties
Şimdi ES’i şu adresteki açıklamalar ışığında kuralım ve çalıştıralım. Burada ES’in default ayarlarını kullanabilirsiniz. Normalde production sunucusuna kurulum yapmıyorsanız default ayarlarda kullanmanız bir sakınca yaratmaz. İlerleyen yazılarımızda ES’i daha verimli nasıl kullanırsınız ve yüksek erişilebilir hale nasıl getirirsiniz ya da ileri seviye ayarlamaları konfigürasyonları nelerdir bunlardan bahsedeceğiz. Şimdi, ilk olarak çalışma ortamını ayarlamak için bir iki eklenti ve bir de Chrome Plugin’i kuracağız.
Eklentilerden başlayacak olursak, head eklentisi Elasticsearch’ün API arayüzüne rahatça kullanabilmenizi sağlar. Bu eklenti ile index’leri type’ları rahatça görebilirsiniz. MySQL’in PhpMyAdmin’i ile aynı görevi görüyor diyebiliriz. Bu eklenti ile index’lerinizi rahatça yönetebilirsiniz.
İkinci eklentimiz olan inquisitor eklentisi ile sorgularınızı debug edebilir ve anlamaya çalışabilirsiniz. Bu eklenti ile oluşturmuş olduğunuz analyzer’larınızı kolayca debug edebilirsiniz ve nasıl çalıştığını görebilirsiniz. Burada doğal olarak analyzer ne sorusu geliyordur aklınıza. Analyzer‘lar Tokenizer ve TokenFilter‘lardan oluşurlar. Tokenizer kavramını kısaca anlatacak olursak, verilen bir string’i daha küçük parçalara ayırma işlemini yaparlar. TokenFilter’lar ise bu parçaları bir filtreden geçirirler. Böylelikle Analyzer’lar ile ES’de tuttuğunuz verileriniz bir takım işlemlerden geçirerek arama yapılabilir bir halde hazırda bekletiyor olacaksınız. Bu konuya daha ilerde ayrı bir yazıda bahsetmeyi düşünüyorum. Şimdilik böyle bir şeyin olduğunu ve ileride kullanacağınızı bilmeniz yeterli.
Bunlar dışında bir çok eklenti mevcut. Hepsinden bahsedemeyeceğim ama zamanı geldikçe eklentiler hakkında kısaca bilgi vermeye çalışacağım.
Şimdi development ortamımızı şenlendirecek Chrome Eklentimize. Sense eklentisi ile ES sorgularını hızlı ve rahat bir şekilde çalıştırabilirsiniz. Aşağıda bir dizi komut yazacağım ve Sense eklentisi ile hızlıca deneyebileceksiniz. Sense ile sorgu çalıştırmak için aşağıdaki formatta bir sorgu yapmamız gerekiyor.
METHOD /es/paths
{
"JSON" : "DATA"
}
Bu sorgu formatında METHOD isteğin metodunu belirlemektedir. GET, POST, DELETE, …
gibi methodlar ile ES’e sorgu atabileceğiz. /es/paths
kısmı ise ES’de sorgu
yapacağınız index, type’ı belirlemek için kullanılan bir URL. Geri kalan kısmı ise
veri kısmı. Bundan sonraki yazılarımızda sorguları bu formatta yazacağımız için
çabuk ısınacağınıza inanıyorum.
Aşağıda Sense ile çalıştırabileceğiniz bir kaç komut dizisi oluşturdum. Bunlar üzerinden giderek kısaca başlangıç yapabilirsiniz.
Yeni bir index oluşturmak.
POST /test-index
Yeni bir döküman oluşturmak.
POST /test-index/test/1
{
"id": 1,
"name": "haydar külekci"
}
Yeni bir döküman oluşturmak
POST /test-index/test/2
{
"id": 1,
"name": "Test Name"
}
Type Mapping Bilgilerini Getirmek
GET /test-index/test/_mapping
Oluşturulmuş bir dökümanı getirmek
GET /test-index/test/1
Arama yapmak:
GET /test-index/test/_search
{
"query": {
"match_all": {}
}
}
Bağlantılar
Diğer Bazı Eklentiler