Elasticsearch - Hızlı Kılavuz
Elasticsearch, Apache Lucene tabanlı bir arama sunucusudur. Shay Banon tarafından geliştirilmiş ve 2010 yılında yayınlanmıştır. Şu anda Elasticsearch BV tarafından bakımı yapılmaktadır. En son sürümü 7.0.0'dır.
Elasticsearch, gerçek zamanlı dağıtılmış ve açık kaynaklı bir tam metin arama ve analiz motorudur. RESTful web hizmeti arayüzünden erişilebilir ve verileri depolamak için şema daha az JSON (JavaScript Object Notation) belgeleri kullanır. Java programlama dili üzerine inşa edilmiştir ve dolayısıyla Elasticsearch farklı platformlarda çalışabilir. Kullanıcıların çok büyük miktarda veriyi çok yüksek hızda keşfetmelerini sağlar.
Genel Özellikler
Elasticsearch'ün genel özellikleri aşağıdaki gibidir -
Elasticsearch, petabaytlarca yapılandırılmış ve yapılandırılmamış veriye kadar ölçeklenebilir.
Elasticsearch, MongoDB ve RavenDB gibi belge depolarının yerine kullanılabilir.
Elasticsearch, arama performansını iyileştirmek için normalsizleştirme kullanır.
Elasticsearch, popüler kurumsal arama motorlarından biridir ve şu anda Wikipedia, The Guardian, StackOverflow, GitHub gibi birçok büyük kuruluş tarafından kullanılmaktadır.
Elasticsearch bir açık kaynaktır ve Apache lisansı sürüm 2.0 altında mevcuttur.
Anahtar kavramlar
Elasticsearch'ün temel kavramları aşağıdaki gibidir -
Düğüm
Elasticsearch'ün çalışan tek bir örneğini ifade eder. Tek fiziksel ve sanal sunucu, RAM, depolama ve işlem gücü gibi fiziksel kaynaklarının yeteneklerine bağlı olarak birden çok düğümü barındırır.
Küme
Bir veya daha fazla düğümden oluşan bir koleksiyondur. Küme, verilerin tamamı için tüm düğümlerde toplu indeksleme ve arama yetenekleri sağlar.
Dizin
Farklı türdeki belgelerin ve özelliklerinin bir koleksiyonudur. Dizin, performansı iyileştirmek için parça kavramını da kullanır. Örneğin, bir dizi belge bir sosyal ağ uygulamasının verilerini içerir.
Belge
JSON biçiminde tanımlanan belirli bir şekilde alanların bir koleksiyonudur. Her belge bir türe aittir ve bir dizinin içinde yer alır. Her belge, UID adı verilen benzersiz bir tanımlayıcıyla ilişkilendirilir.
Kırık
Dizinler yatay olarak parçalara bölünmüştür. Bu, her bir parçanın belgenin tüm özelliklerini içerdiği ancak dizinden daha az sayıda JSON nesnesi içerdiği anlamına gelir. Yatay ayırma, parçacığı herhangi bir düğümde depolanabilen bağımsız bir düğüm haline getirir. Birincil parça, bir dizinin orijinal yatay kısmıdır ve daha sonra bu birincil parçalar, kopya parçalara kopyalanır.
Kopyalar
Elasticsearch, bir kullanıcının dizinlerinin ve parçalarının kopyalarını oluşturmasına olanak tanır. Çoğaltma, yalnızca arıza durumunda verilerin kullanılabilirliğini artırmaya yardımcı olmakla kalmaz, aynı zamanda bu eşlemelerde paralel arama işlemi gerçekleştirerek arama performansını da artırır.
Avantajlar
Elasticsearch, neredeyse her platformda uyumlu olmasını sağlayan Java üzerinde geliştirilmiştir.
Elasticsearch gerçek zamanlıdır, yani bir saniye sonra eklenen belge bu motorda aranabilir
Elasticsearch dağıtılmıştır, bu da herhangi bir büyük organizasyonda ölçeklendirmeyi ve entegre etmeyi kolaylaştırır.
Elasticsearch'te bulunan ağ geçidi konseptini kullanarak tam yedeklemeler oluşturmak kolaydır.
Elasticsearch'te çok kiracılığın yönetimi Apache Solr ile karşılaştırıldığında çok kolaydır.
Elasticsearch, JSON nesnelerini yanıt olarak kullanır, bu da Elasticsearch sunucusunu çok sayıda farklı programlama diliyle çalıştırmayı mümkün kılar.
Elasticsearch, metin oluşturmayı desteklemeyenler dışında hemen hemen her belge türünü destekler.
Dezavantajları
Elasticsearch, CSV, XML ve JSON formatlarında mümkün olan Apache Solr'dan farklı olarak istek ve yanıt verilerini işleme açısından çoklu dil desteğine sahip değildir (yalnızca JSON'da mümkündür).
Bazen, Elasticsearch'ün bir Bölünmüş beyin durumları sorunu vardır.
Elasticsearch ve RDBMS arasında karşılaştırma
Elasticsearch'te indeks, RDBMS'deki (İlişki Veritabanı Yönetim Sistemi) tablolara benzer. Her tablo, tıpkı her indeksin Elasticsearch'teki bir belge koleksiyonu olduğu gibi, bir satırlar koleksiyonudur.
Aşağıdaki tablo, bu terimler arasında doğrudan bir karşılaştırma vermektedir−
Elasticsearch | RDBMS |
---|---|
Küme | Veri tabanı |
Kırık | Kırık |
Dizin | Tablo |
Alan | Sütun |
Belge | Kürek çekmek |
Bu bölümde, Elasticsearch'ün kurulum prosedürünü ayrıntılı olarak anlayacağız.
Elasticsearch'ü yerel bilgisayarınıza kurmak için, aşağıda verilen adımları izlemeniz gerekecektir -
Step 1- Bilgisayarınızda yüklü olan java sürümünü kontrol edin. Java 7 veya üstü olmalıdır. Aşağıdakileri yaparak kontrol edebilirsiniz -
Windows İşletim Sisteminde (OS) (komut istemini kullanarak) -
> java -version
UNIX OS'de (Terminal Kullanarak) -
$ echo $JAVA_HOME
Step 2 - İşletim sisteminize bağlı olarak, Elasticsearch'ü www.elastic.co adresinden aşağıda belirtildiği gibi indirin -
Windows işletim sistemi için ZIP dosyasını indirin.
UNIX OS için TAR dosyasını indirin.
Debian OS için DEB dosyasını indirin.
Red Hat ve diğer Linux dağıtımları için, RPN dosyasını indirin.
APT ve Yum yardımcı programları, birçok Linux dağıtımında Elasticsearch'ü kurmak için de kullanılabilir.
Step 3 - Elasticsearch için kurulum süreci basittir ve farklı işletim sistemleri için aşağıda açıklanmıştır -
Windows OS- Zip paketini açın ve Elasticsearch kurulur.
UNIX OS- Tar dosyasını herhangi bir konumda çıkarın ve Elasticsearch kurulur.
$wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch7.0.0-linux-x86_64.tar.gz $tar -xzf elasticsearch-7.0.0-linux-x86_64.tar.gz
Using APT utility for Linux OS- Genel İmzalama Anahtarını indirin ve yükleyin
$ wget -qo - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo
apt-key add -
Depo tanımını aşağıda gösterildiği gibi kaydedin -
$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" |
sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Aşağıdaki komutu kullanarak güncellemeyi çalıştırın -
$ sudo apt-get update
Şimdi aşağıdaki komutu kullanarak kurabilirsiniz -
$ sudo apt-get install elasticsearch
Download and install the Debian package manually using the command given here −
$wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch7.0.0-amd64.deb $sudo dpkg -i elasticsearch-7.0.0-amd64.deb0
Using YUM utility for Debian Linux OS
Genel İmzalama Anahtarını indirin ve yükleyin -
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
“/Etc/yum.repos.d/” dizininizde .repo son eki olan dosyaya aşağıdaki metni EKLEYİNİZ. Örneğin, elasticsearch.repo
elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Artık Elasticsearch'ü aşağıdaki komutu kullanarak kurabilirsiniz
sudo yum install elasticsearch
Step 4- Elasticsearch ana dizinine ve bin klasörünün içine gidin. Windows durumunda elasticsearch.bat dosyasını çalıştırın veya UNIX rom Elasticsearch dosyası durumunda aynı işlemi komut istemini kullanarak ve terminal aracılığıyla yapabilirsiniz.
Windows'ta
> cd elasticsearch-2.1.0/bin
> elasticsearch
Linux'ta
$ cd elasticsearch-2.1.0/bin
$ ./elasticsearch
Note - Windows durumunda, JAVA_HOME'un ayarlanmadığını belirten bir hata alabilirsiniz, lütfen bunu ortam değişkenlerinde “C: \ Program Files \ Java \ jre1.8.0_31” veya java'yı kurduğunuz konuma ayarlayın.
Step 5- Elasticsearch web arayüzü için varsayılan bağlantı noktası 9200'dür veya bin dizininde bulunan elasticsearch.yml dosyası içindeki http.port'u değiştirerek değiştirebilirsiniz. Göz atarak sunucunun çalışır durumda olup olmadığını kontrol edebilirsiniz.http://localhost:9200. Yüklü Elasticsearch ile ilgili bilgileri aşağıdaki şekilde içeren bir JSON nesnesi döndürür -
{
"name" : "Brain-Child",
"cluster_name" : "elasticsearch", "version" : {
"number" : "2.1.0",
"build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
"build_timestamp" : "2015-11-18T22:40:03Z",
"build_snapshot" : false,
"lucene_version" : "5.3.1"
},
"tagline" : "You Know, for Search"
}
Step 6- Bu adımda Kibana'yı kuralım. Linux ve Windows'a kurmak için aşağıda verilen ilgili kodu takip edin -
For Installation on Linux −
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-linuxx86_64.tar.gz
tar -xzf kibana-7.0.0-linux-x86_64.tar.gz
cd kibana-7.0.0-linux-x86_64/
./bin/kibana
For Installation on Windows −
Windows için Kibana'yı şuradan indirin: https://www.elastic.co/products/kibana. Bağlantıya tıkladığınızda, aşağıda gösterildiği gibi ana sayfayı bulacaksınız -
Zip dosyasını açın ve Kibana ana dizinine gidin ve ardından çalıştırın.
CD c:\kibana-7.0.0-windows-x86_64
.\bin\kibana.bat
Bu bölümde, Elasticsearch'e bazı indeks, eşleme ve verileri nasıl ekleyeceğimizi öğrenelim. Bu verilerin bir kısmının bu eğitimde açıklanan örneklerde kullanılacağını unutmayın.
Dizin Oluştur
Bir dizin oluşturmak için aşağıdaki komutu kullanabilirsiniz -
PUT school
Tepki
Dizin oluşturulursa, aşağıdaki çıktıyı görebilirsiniz -
{"acknowledged": true}
Veri ekle
Elasticsearch, aşağıdaki kodda gösterildiği gibi dizine eklediğimiz belgeleri saklayacaktır. Belgelere, belgeyi tanımlamada kullanılan bazı kimlikler verilir.
Gövde İste
POST school/_doc/10
{
"name":"Saint Paul School", "description":"ICSE Afiliation",
"street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075",
"location":[28.5733056, 77.0122136], "fees":5000,
"tags":["Good Faculty", "Great Sports"], "rating":"4.5"
}
Tepki
{
"_index" : "school",
"_type" : "_doc",
"_id" : "10",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
Burada benzer bir belge daha ekliyoruz.
POST school/_doc/16
{
"name":"Crescent School", "description":"State Board Affiliation",
"street":"Tonk Road",
"city":"Jaipur", "state":"RJ", "zip":"176114","location":[26.8535922,75.7923988],
"fees":2500, "tags":["Well equipped labs"], "rating":"4.5"
}
Tepki
{
"_index" : "school",
"_type" : "_doc",
"_id" : "16",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 9,
"_primary_term" : 7
}
Bu şekilde, ilerleyen bölümlerde çalışmamız için ihtiyaç duyduğumuz örnek verileri eklemeye devam edeceğiz.
Kibana'da Örnek Veri Ekleme
Kibana, verilere erişmek ve görselleştirmeyi oluşturmak için GUI tabanlı bir araçtır. Bu bölümde, ona örnek verileri nasıl ekleyebileceğimizi anlayalım.
Kibana ana sayfasında, örnek e-ticaret verilerini eklemek için aşağıdaki seçeneği seçin -
Sonraki ekranda biraz görselleştirme ve Veri eklemek için bir düğme gösterilecektir -
Veri Ekle'ye tıklamak, verilerin e-Ticaret adlı bir dizine eklendiğini onaylayan aşağıdaki ekranı gösterecektir.
Herhangi bir sistem veya yazılımda, daha yeni sürüme yükseltirken, uygulama ayarlarını, yapılandırmalarını, verilerini ve diğer şeyleri korumak için birkaç adımı izlememiz gerekir. Bu adımlar, uygulamayı yeni sistemde kararlı hale getirmek veya verilerin bütünlüğünü korumak (verilerin bozulmasını önlemek) için gereklidir.
Elasticsearch'ü yükseltmek için aşağıdaki adımları izlemeniz gerekir -
Yükseltme belgelerini şuradan okuyun: https://www.elastic.co/
Yükseltilmiş sürümü UAT, E2E, SIT veya DEV ortamı gibi üretim dışı ortamlarınızda test edin.
Veri yedeklemesi olmadan önceki Elasticsearch sürümüne geri dönmenin mümkün olmadığını unutmayın. Bu nedenle, daha yüksek bir sürüme yükseltmeden önce bir veri yedeklemesi önerilir.
Tam küme yeniden başlatma veya sıralı yükseltme kullanarak yükseltme yapabiliriz. Sıralı yükseltme, yeni sürümler içindir. Geçiş için sıralı yükseltme yöntemini kullandığınızda hizmet kesintisi olmadığını unutmayın.
Yükseltme Adımları
Üretim kümenizi yükseltmeden önce geliştirici ortamında yükseltmeyi test edin.
Verilerinizi yedekleyin. Verilerinizin anlık görüntüsüne sahip değilseniz önceki bir sürüme geri dönemezsiniz.
Yükseltme sürecine başlamadan önce makine öğrenimi işlerini kapatmayı düşünün. Makine öğrenimi işleri sıralı yükseltme sırasında çalışmaya devam edebilirken, yükseltme işlemi sırasında küme üzerindeki yükü artırır.
Elastic Stack'inizin bileşenlerini aşağıdaki sırayla yükseltin -
- Elasticsearch
- Kibana
- Logstash
- Beats
- APM Sunucusu
6.6 veya Öncesine Yükseltme
6.0-6.6 sürümlerinden doğrudan Elasticsearch 7.1.0'a yükseltmek için, ileriye taşımanız gereken 5.x dizinlerini manuel olarak yeniden dizinlemeniz ve tam bir küme yeniden başlatma işlemi gerçekleştirmeniz gerekir.
Tam Küme Yeniden Başlatma
Tam küme yeniden başlatma işlemi, kümedeki her düğümün kapatılmasını, her düğümü 7x'e yükseltmeyi ve ardından kümeyi yeniden başlatmayı içerir.
Aşağıda, kümenin tam olarak yeniden başlatılması için gerçekleştirilmesi gereken yüksek düzey adımlar verilmiştir -
- Parça tahsisini devre dışı bırakın
- İndekslemeyi durdurun ve senkronize bir yıkama gerçekleştirin
- Tüm düğümleri kapat
- Tüm düğümleri yükseltin
- Herhangi bir eklentiyi yükseltin
- Yükseltilmiş her düğümü başlatın
- Tüm düğümlerin kümeye katılmasını ve sarı durumu bildirmesini bekleyin
- Tahsisi yeniden etkinleştirin
Tahsis yeniden etkinleştirildikten sonra, küme çoğaltma parçalarını veri düğümlerine ayırmaya başlar. Bu noktada, dizin oluşturmaya ve aramaya devam etmek güvenlidir, ancak tüm birincil ve çoğaltma parçaları başarıyla tahsis edilene ve tüm düğümlerin durumu yeşil olana kadar bekleyebilirseniz kümeniz daha hızlı kurtarılacaktır.
Web'deki Uygulama Programlama Arayüzü (API), söz konusu web uygulamasındaki yazılım bileşenine erişmek için bir grup işlev çağrısı veya diğer programlama talimatlarından oluşur. Örneğin, Facebook API, bir geliştiricinin Facebook'tan verilere veya diğer işlevlere erişerek uygulamalar oluşturmasına yardımcı olur; doğum tarihi veya durum güncellemesi olabilir.
Elasticsearch, JSON tarafından HTTP üzerinden erişilen bir REST API sağlar. Elasticsearch, şimdi tartışacağımız bazı kuralları kullanır.
Çoklu Endeksler
API'lerdeki işlemlerin çoğu, özellikle arama ve diğer işlemler, bir veya birden fazla endeks içindir. Bu, kullanıcının yalnızca bir sorgu çalıştırarak birden çok yerde veya tüm mevcut verileri aramasına yardımcı olur. Birden çok dizinde işlem yapmak için birçok farklı gösterim kullanılır. Bu bölümde birkaçını burada tartışacağız.
Virgülle Ayrılmış Gösterim
POST /index1,index2,index3/_search
Gövde İste
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
Tepki
İçinde any_string bulunan dizin1, dizin2, dizin3'teki JSON nesneleri.
_all Tüm Endeksler için Anahtar Kelime
POST /_all/_search
Gövde İste
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
Tepki
Tüm dizinlerden ve içinde any_string bulunan JSON nesneleri.
Joker karakterler (*, +, -)
POST /school*/_search
Gövde İste
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Tepki
İçinde CBSE bulunan okulla başlayan tüm dizinlerden JSON nesneleri.
Alternatif olarak, aşağıdaki kodu da kullanabilirsiniz -
POST /school*,-schools_gov /_search
Gövde İste
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Tepki
JSON, "okul" ile başlayan ancak school_gov'dan olmayan ve içinde CBSE bulunan tüm endekslerden nesneler.
Bazı URL sorgu dizesi parametreleri de vardır -
- ignore_unavailable- URL'de bulunan bir veya daha fazla dizin yoksa hiçbir hata oluşmaz veya işlem durdurulmaz. Örneğin, okullar dizini vardır, ancak kitap_dizileri mevcut değildir.
POST /school*,book_shops/_search
Gövde İste
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Gövde İste
{
"error":{
"root_cause":[{
"type":"index_not_found_exception", "reason":"no such index",
"resource.type":"index_or_alias", "resource.id":"book_shops",
"index":"book_shops"
}],
"type":"index_not_found_exception", "reason":"no such index",
"resource.type":"index_or_alias", "resource.id":"book_shops",
"index":"book_shops"
},"status":404
}
Aşağıdaki kodu düşünün -
POST /school*,book_shops/_search?ignore_unavailable = true
Gövde İste
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Yanıt (hata yok)
İçinde CBSE bulunan okulla başlayan tüm dizinlerden JSON nesneleri.
allow_no_indices
trueBu parametrenin değeri, joker karakter içeren bir URL hiçbir dizin oluşturmazsa hatayı önler. Örneğin, school_pri ile başlayan bir dizin yoktur -
POST /schools_pri*/_search?allow_no_indices = true
Gövde İste
{
"query":{
"match_all":{}
}
}
Yanıt (Hata yok)
{
"took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0},
"hits":{"total":0, "max_score":0.0, "hits":[]}
}
expand_wildcards
Bu parametre, joker karakterlerin indisleri veya kapalı indisleri açmak veya her ikisini birden gerçekleştirmek için genişletilmesi gerekip gerekmediğini belirler. Bu parametrenin değeri açık ve kapalı olabilir veya hiç olabilir.
Örneğin, dizin okullarını kapatın -
POST /schools/_close
Tepki
{"acknowledged":true}
Aşağıdaki kodu düşünün -
POST /school*/_search?expand_wildcards = closed
Gövde İste
{
"query":{
"match_all":{}
}
}
Tepki
{
"error":{
"root_cause":[{
"type":"index_closed_exception", "reason":"closed", "index":"schools"
}],
"type":"index_closed_exception", "reason":"closed", "index":"schools"
}, "status":403
}
Dizin Adlarında Tarih Matematik Desteği
Elasticsearch, endeksleri tarih ve saate göre aramak için bir işlev sunar. Tarih ve saati belirli bir formatta belirtmemiz gerekiyor. Örneğin, accountdetail-2015.12.30 endeksi, 30 Aralık 2015 banka hesap ayrıntılarını saklayacaktır. Belirli bir tarih veya bir tarih ve saat aralığı için ayrıntıları almak için matematiksel işlemler gerçekleştirilebilir.
Tarih matematik dizin adı biçimi -
<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search
static_name, hesap detayı gibi her tarih matematik indeksinde aynı kalan ifadenin bir parçasıdır. date_math_expr, now-2d gibi tarih ve saati dinamik olarak belirleyen matematiksel ifadeyi içerir. date_format, YYYY.MM.dd gibi dizine tarihin yazıldığı biçimi içerir. Bugünün tarihi 30 Aralık 2015 ise, <accountdetail- {now-2d {YYYY.MM.dd}}>, accountdetail-2015.12.28'i döndürecektir.
İfade | Çözülür |
---|---|
<accountdetail- {şimdi-d}> | accountdetail-2015.12.29 |
<accountdetail- {şimdi-M}> | accountdetail-2015.11.30 |
<accountdetail- {şimdi {YYYY.MM}}> | hesap detayı-2015.12 |
Şimdi Elasticsearch'te belirli bir formatta yanıtı almak için kullanılabilen bazı yaygın seçenekleri göreceğiz.
Hoş Sonuçlar
İyi biçimlendirilmiş bir JSON nesnesinde sadece bir URL sorgu parametresi ekleyerek, yani pretty = true şeklinde yanıt alabiliriz.
POST /schools/_search?pretty = true
Gövde İste
{
"query":{
"match_all":{}
}
}
Tepki
……………………..
{
"_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
"_source":{
"name":"Central School", "description":"CBSE Affiliation",
"street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
"location": [31.8955385, 76.8380405], "fees":2000,
"tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
}
}
………………….
İnsan Okuyabilir Çıktı
Bu seçenek, istatistiksel yanıtları insan tarafından okunabilir forma (insan = doğruysa) veya bilgisayar tarafından okunabilir forma (insan = yanlışsa) değiştirebilir. Örneğin, eğer insan = doğru ise distance_kilometer = 20KM ve eğer insan = false ise o zaman distance_meter = 20000, yanıtın başka bir bilgisayar programı tarafından kullanılması gerektiğinde.
Yanıt Filtreleme
Yanıtı, field_path parametresine ekleyerek daha az alana filtreleyebiliriz. Örneğin,
POST /schools/_search?filter_path = hits.total
Gövde İste
{
"query":{
"match_all":{}
}
}
Tepki
{"hits":{"total":3}}
Elasticsearch, API çağrısının sırasıyla tek bir belgeyi ve birden çok belgeyi hedeflediği tek belge API'leri ve çoklu belge API'leri sağlar.
Index API
Spesifik eşlemeyle ilgili dizine bir istek yapıldığında JSON belgesini bir dizine eklemeye veya güncellemeye yardımcı olur. Örneğin, aşağıdaki istek JSON nesnesini okulların dizinine ve okul eşlemesine ekleyecektir -
PUT schools/_doc/5
{
name":"City School", "description":"ICSE", "street":"West End",
"city":"Meerut",
"state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
"fees":3500,
"tags":["fully computerized"], "rating":"4.5"
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
Otomatik Dizin Oluşturma
JSON nesnesini belirli bir dizine eklemek için bir istekte bulunulduğunda ve bu dizin mevcut değilse, bu API otomatik olarak bu dizini ve ayrıca söz konusu JSON nesnesi için temel eşlemeyi oluşturur. Bu işlevsellik, elasticsearch.yml dosyasında bulunan aşağıdaki parametrelerin değerleri yanlış olarak değiştirilerek devre dışı bırakılabilir.
action.auto_create_index:false
index.mapper.dynamic:false
Ayrıca, aşağıdaki parametrenin değerini değiştirerek yalnızca belirli kalıplara sahip dizin adına izin verildiğinde, otomatik indeks oluşturulmasını kısıtlayabilirsiniz -
action.auto_create_index:+acc*,-bank*
Note - Burada + izin verildiğini ve - izin verilmediğini gösterir.
Sürüm oluşturma
Elasticsearch ayrıca sürüm kontrol olanağı sağlar. Belirli bir belgenin sürümünü belirtmek için bir sürüm sorgu parametresi kullanabiliriz.
PUT schools/_doc/5?version=7&version_type=external
{
"name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
"city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
"fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
Sürüm oluşturma gerçek zamanlı bir süreçtir ve gerçek zamanlı arama işlemlerinden etkilenmez.
En önemli iki tür sürüm oluşturma vardır -
Dahili Versiyonlama
Dahili sürüm oluşturma, 1 ile başlayan ve her güncellemede artışlarla birlikte silinen varsayılan sürümdür.
Harici Sürüm Oluşturma
Dokümanların versiyonlanması, üçüncü taraf versiyonlama sistemleri gibi harici bir sistemde saklandığında kullanılır. Bu işlevi etkinleştirmek için version_type'ı external olarak ayarlamamız gerekiyor. Burada Elasticsearch, sürüm numarasını harici sistem tarafından belirlenen şekilde saklayacak ve bunları otomatik olarak artırmayacaktır.
Operasyon türü
İşlem türü, oluşturma işlemini zorlamak için kullanılır. Bu, mevcut belgenin üzerine yazılmasını önlemeye yardımcı olur.
PUT chapter/_doc/1?op_type=create
{
"Text":"this is chapter one"
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Otomatik kimlik oluşturma
Dizin işleminde kimlik belirtilmediğinde, Elasticsearch bu belge için otomatik olarak kimlik oluşturur.
POST chapter/_doc/
{
"user" : "tpoint",
"post_date" : "2018-12-25T14:12:12",
"message" : "Elasticsearch Tutorial"
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "PVghWGoB7LiDTeV6LSGu",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
API alın
API, belirli bir belge için bir alma isteği gerçekleştirerek JSON türü nesnenin çıkarılmasına yardımcı olur.
pre class="prettyprint notranslate" > GET schools/_doc/5
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
Bu işlem gerçek zamanlıdır ve Index'in yenileme hızından etkilenmez.
Ayrıca sürümü belirtebilirsiniz, ardından Elasticsearch belgenin yalnızca o sürümünü getirecektir.
Ayrıca istekte _all'ı da belirtebilirsiniz, böylece Elasticsearch bu belge kimliğini her türde arayabilir ve ilk eşleşen belgeyi döndürecektir.
Ayrıca, sonucunuzda istediğiniz alanları o belgeden de belirtebilirsiniz.
GET schools/_doc/5?_source_includes=name,fees
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"fees" : 2200,
"name" : "Central School"
}
}
Ayrıca, alma isteğinize sadece _source bölümünü ekleyerek sonucunuzdaki kaynak bölümünü de getirebilirsiniz.
GET schools/_doc/5?_source
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
Ayrıca, yenileme parametresini true olarak ayarlayarak alma işlemini gerçekleştirmeden önce parçayı yenileyebilirsiniz.
API'yi silin
Elasticsearch'e HTTP SİLME isteği göndererek belirli bir dizini, eşlemeyi veya bir belgeyi silebilirsiniz.
DELETE schools/_doc/4
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
"_shards":{"total":2, "successful":1, "failed":0}
}
Belgenin sürümü, bu belirli sürümü silmek için belirtilebilir. Yönlendirme parametresi, dokümanı belirli bir kullanıcıdan silmek için belirtilebilir ve doküman söz konusu kullanıcıya ait değilse işlem başarısız olur. Bu işlemde, GET API ile aynı yenileme ve zaman aşımı seçeneklerini belirtebilirsiniz.
API'yi güncelle
Bu işlemi gerçekleştirmek için komut dosyası kullanılır ve sürüm oluşturma, alma ve yeniden endeksleme sırasında hiçbir güncellemenin gerçekleşmediğinden emin olmak için kullanılır. Örneğin, okul ücretlerini komut dosyası kullanarak güncelleyebilirsiniz -
POST schools/_update/4
{
"script" : {
"source": "ctx._source.name = params.sname",
"lang": "painless",
"params" : {
"sname" : "City Wise School"
}
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "4",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
Güncellenen belgeye alma isteği göndererek güncellemeyi kontrol edebilirsiniz.
Bu API, Elasticsearch'te içerik aramak için kullanılır. Bir kullanıcı, parametre olarak sorgu dizesi içeren bir alma isteği göndererek arama yapabilir veya gönderi isteğinin mesaj gövdesine bir sorgu gönderebilir. Esas olarak tüm arama APIS'leri çoklu dizin, çok tiplidir.
Çoklu Dizin
Elasticsearch, tüm endekslerde veya bazı belirli endekslerde bulunan belgeleri aramamıza olanak tanır. Örneğin, merkezi içeren bir ada sahip tüm belgeleri aramamız gerekirse, burada gösterildiği gibi yapabiliriz -
GET /_all/_search?q=city:paprola
Yukarıdaki kodu çalıştırdığımızda şu yanıtı alıyoruz -
{
"took" : 33,
"timed_out" : false,
"_shards" : {
"total" : 7,
"successful" : 7,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808292,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 0.9808292,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
]
}
}
URI Araması
Tekdüzen Kaynak Tanımlayıcısı kullanılarak birçok parametre bir arama işleminde geçirilebilir -
S.No | Parametre ve Açıklama |
---|---|
1 | Q Bu parametre, sorgu dizesini belirtmek için kullanılır. |
2 | lenient Bu parametre sorgu dizesini belirtmek için kullanılır. Biçim tabanlı hatalar sadece bu parametrenin true olarak ayarlanmasıyla göz ardı edilebilir. Varsayılan olarak yanlıştır. |
3 | fields Bu parametre, sorgu dizesini belirtmek için kullanılır. |
4 | sort Bu parametreyi kullanarak sıralı sonuç alabiliriz, bu parametre için olası değerler fieldName, fieldName: asc / fieldname: desc'dir. |
5 | timeout Bu parametreyi kullanarak arama süresini kısıtlayabiliriz ve yanıt yalnızca belirtilen zamandaki isabetleri içerir. Varsayılan olarak zaman aşımı yoktur. |
6 | terminate_after Yanıtı, sorgunun erken sona ereceği ulaşıldığında, her parça için belirli sayıda belgeyle sınırlayabiliriz. Varsayılan olarak, terminate_after yoktur. |
7 | from Döndürülecek isabetlerin dizininden başlayarak. Varsayılan 0'dır. |
8 | size Döndürülecek isabet sayısını gösterir. Varsayılan 10. |
Vücut Araması İste
Ayrıca istek gövdesinde DSL sorgusunu kullanarak sorgu da belirtebiliriz ve daha önceki bölümlerde verilen birçok örnek vardır. Böyle bir örnek burada verilmiştir -
POST /schools/_search
{
"query":{
"query_string":{
"query":"up"
}
}
}
Yukarıdaki kodu çalıştırdığımızda şu yanıtı alıyoruz -
{
"took" : 11,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.47000363,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 0.47000363,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Toplama çerçevesi, arama sorgusu tarafından seçilen tüm verileri toplar ve verilerin karmaşık özetlerini oluşturmaya yardımcı olan birçok yapı taşından oluşur. Bir toplamanın temel yapısı burada gösterilmektedir -
"aggregations" : {
"" : {
"" : {
}
[,"meta" : { [] } ]?
[,"aggregations" : { []+ } ]?
}
[,"" : { ... } ]*
}
Her birinin kendi amacı olan farklı toplama türleri vardır. Bu bölümde ayrıntılı olarak tartışılmaktadır.
Metrik Toplamaları
Bu toplamalar, toplanan belgelerin alan değerlerinden matrislerin hesaplanmasına yardımcı olur ve bazen komut dosyalarından bazı değerler üretilebilir.
Sayısal matrisler ya ortalama toplama gibi tek değerlidir ya da çok değerli benzer istatistikler.
Ort Toplama
Bu toplama, birleştirilmiş belgelerde bulunan herhangi bir sayısal alanın ortalamasını elde etmek için kullanılır. Örneğin,
POST /schools/_search
{
"aggs":{
"avg_fees":{"avg":{"field":"fees"}}
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 41,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
},
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
},
"aggregations" : {
"avg_fees" : {
"value" : 2850.0
}
}
}
Cardinality Aggregation
Bu toplama, belirli bir alanın farklı değerlerinin sayısını verir.
POST /schools/_search?size=0
{
"aggs":{
"distinct_name_count":{"cardinality":{"field":"fees"}}
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"distinct_name_count" : {
"value" : 2
}
}
}
Note - Asıllık değeri 2'dir çünkü ücretlerde iki farklı değer vardır.
Genişletilmiş İstatistik Toplama
Bu toplama, birleştirilmiş belgelerdeki belirli bir sayısal alanla ilgili tüm istatistikleri oluşturur.
POST /schools/_search?size=0
{
"aggs" : {
"fees_stats" : { "extended_stats" : { "field" : "fees" } }
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"fees_stats" : {
"count" : 2,
"min" : 2200.0,
"max" : 3500.0,
"avg" : 2850.0,
"sum" : 5700.0,
"sum_of_squares" : 1.709E7,
"variance" : 422500.0,
"std_deviation" : 650.0,
"std_deviation_bounds" : {
"upper" : 4150.0,
"lower" : 1550.0
}
}
}
}
Maksimum Toplama
Bu toplama, birleştirilmiş belgelerde belirli bir sayısal alanın maksimum değerini bulur.
POST /schools/_search?size=0
{
"aggs" : {
"max_fees" : { "max" : { "field" : "fees" } }
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 16,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"max_fees" : {
"value" : 3500.0
}
}
}
Min. Toplama
Bu toplama, birleştirilmiş belgelerde belirli bir sayısal alanın minimum değerini bulur.
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "min" : { "field" : "fees" } }
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"min_fees" : {
"value" : 2200.0
}
}
}
Toplam Toplama
Bu toplama, birleştirilmiş belgelerdeki belirli bir sayısal alanın toplamını hesaplar.
POST /schools/_search?size=0
{
"aggs" : {
"total_fees" : { "sum" : { "field" : "fees" } }
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"total_fees" : {
"value" : 5700.0
}
}
}
Coğrafi konum amacıyla coğrafi sınır toplama ve coğrafi merkez toplama gibi özel durumlarda kullanılan diğer bazı ölçüm toplamaları vardır.
İstatistik Toplamaları
İstatistikleri, toplanan belgelerden çıkarılan sayısal değerler üzerinden hesaplayan çok değerli bir metrik toplama.
POST /schools/_search?size=0
{
"aggs" : {
"grades_stats" : { "stats" : { "field" : "fees" } }
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"grades_stats" : {
"count" : 2,
"min" : 2200.0,
"max" : 3500.0,
"avg" : 2850.0,
"sum" : 5700.0
}
}
}
Toplama Meta Verileri
Meta etiket kullanarak istek anında toplama hakkında bazı veriler ekleyebilir ve yanıt olarak elde edebilirsiniz.
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "avg" : { "field" : "fees" } ,
"meta" :{
"dsc" :"Lowest Fees This Year"
}
}
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"min_fees" : {
"meta" : {
"dsc" : "Lowest Fees This Year"
},
"value" : 2850.0
}
}
}
Bu API'ler, ayarlar, takma adlar, eşlemeler, dizin şablonları gibi dizinin tüm yönlerini yönetmekten sorumludur.
Dizin Oluştur
Bu API, bir dizin oluşturmanıza yardımcı olur. Bir kullanıcı JSON nesnelerini herhangi bir dizine geçirdiğinde otomatik olarak bir dizin oluşturulabilir veya bundan önce oluşturulabilir. Bir dizin oluşturmak için, ayarlar, eşlemeler ve takma adlar içeren bir PUT isteği veya gövde içermeyen basit bir istek göndermeniz yeterlidir.
PUT colleges
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "colleges"
}
Yukarıdaki komuta bazı ayarlar da ekleyebiliriz -
PUT colleges
{
"settings" : {
"index" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
}
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "colleges"
}
Dizini Sil
Bu API, herhangi bir dizini silmenize yardımcı olur. Sadece söz konusu Endeksin adıyla bir silme talebini iletmeniz gerekir.
DELETE /colleges
Sadece _all veya * kullanarak tüm dizinleri silebilirsiniz.
Dizini Al
Bu API, bir veya daha fazla dizine alma isteği gönderilerek çağrılabilir. Bu, indeks hakkındaki bilgileri döndürür.
GET colleges
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
{
"colleges" : {
"aliases" : {
"alias_1" : { },
"alias_2" : {
"filter" : {
"term" : {
"user" : "pkay"
}
},
"index_routing" : "pkay",
"search_routing" : "pkay"
}
},
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1556245406616",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "3ExJbdl2R1qDLssIkwDAug",
"version" : {
"created" : "7000099"
},
"provided_name" : "colleges"
}
}
}
}
_All veya * kullanarak tüm endekslerin bilgisine ulaşabilirsiniz.
Dizin Var
Bir dizinin varlığı, sadece o dizine bir alma isteği gönderilerek belirlenebilir. HTTP yanıtı 200 ise, vardır; 404 ise mevcut değildir.
HEAD colleges
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
200-OK
Dizin Ayarları
Dizin ayarlarını, URL'nin sonuna _settings anahtar kelimesini ekleyerek alabilirsiniz.
GET /colleges/_settings
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
{
"colleges" : {
"settings" : {
"index" : {
"creation_date" : "1556245406616",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "3ExJbdl2R1qDLssIkwDAug",
"version" : {
"created" : "7000099"
},
"provided_name" : "colleges"
}
}
}
}
Dizin İstatistikleri
Bu API, belirli bir dizinle ilgili istatistikleri çıkarmanıza yardımcı olur. Sonunda dizin URL'si ve _stats anahtar kelimesi ile bir alma isteği göndermeniz yeterlidir.
GET /_stats
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
………………………………………………
},
"request_cache" : {
"memory_size_in_bytes" : 849,
"evictions" : 0,
"hit_count" : 1171,
"miss_count" : 4
},
"recovery" : {
"current_as_source" : 0,
"current_as_target" : 0,
"throttle_time_in_millis" : 0
}
} ………………………………………………
Flush
Bir dizinin temizleme işlemi, şu anda yalnızca işlem günlüğünde saklanan tüm verilerin Lucene'de kalıcı olarak saklanmasını sağlar. Bu, Lucene indeksli açıldıktan sonra verilerin işlem günlüklerinden yeniden indekslenmesine gerek olmadığından kurtarma sürelerini azaltır.
POST colleges/_flush
Yukarıdaki kodu çalıştırırken, çıktıyı aşağıda gösterildiği gibi elde ederiz -
{
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
}
}
Genellikle çeşitli Elasticsearch API'lerinden elde edilen sonuçlar JSON formatında görüntülenir. Ancak JSON'u her zaman okumak kolay değildir. Dolayısıyla, Elasticsearch'te bulunan cat APIs özelliği, sonuçların baskı formatını okumayı ve anlamayı kolaylaştırmaya yardımcı olur. Cat API'de farklı amaca hizmet eden çeşitli parametreler vardır, örneğin - V terimi çıktıyı ayrıntılı hale getirir.
Bu bölümde cat API'leri hakkında daha ayrıntılı bilgi edinelim.
Ayrıntılı
Ayrıntılı çıktı, bir cat komutunun sonuçlarının güzel bir görüntüsünü verir. Aşağıda verilen örnekte, kümede bulunan çeşitli endekslerin ayrıntılarını alıyoruz.
GET /_cat/indices?v
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open schools RkMyEn2SQ4yUgzT6EQYuAA 1 1 2 1 21.6kb 21.6kb
yellow open index_4_analysis zVmZdM1sTV61YJYrNXf1gg 1 1 0 0 283b 283b
yellow open sensor-2018-01-01 KIrrHwABRB-ilGqTu3OaVQ 1 1 1 0 4.2kb 4.2kb
yellow open colleges 3ExJbdl2R1qDLssIkwDAug 1 1 0 0 283b 283b
Başlıklar
Başlık olarak da adlandırılan h parametresi, yalnızca komutta belirtilen sütunları görüntülemek için kullanılır.
GET /_cat/nodes?h=ip,port
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
127.0.0.1 9300
Çeşit
Sort komutu, tabloyu sorgudaki belirtilen sütuna göre sıralayabilen sorgu dizesini kabul eder. Varsayılan sıralama artan ama bu, bir sütuna: desc eklenerek değiştirilebilir.
Aşağıdaki örnek, dosyalanmış indeks modellerinin azalan sırasına göre düzenlenmiş şablonların bir sonucunu verir.
GET _cat/templates?v&s=order:desc,index_patterns
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
name index_patterns order version
.triggered_watches [.triggered_watches*] 2147483647
.watch-history-9 [.watcher-history-9*] 2147483647
.watches [.watches*] 2147483647
.kibana_task_manager [.kibana_task_manager] 0 7000099
Miktar
Count parametresi, kümenin tamamındaki toplam belge sayısını sağlar.
GET /_cat/count?v
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
epoch timestamp count
1557633536 03:58:56 17809
Küme API'si, küme ve düğümleri hakkında bilgi almak ve bunlarda değişiklik yapmak için kullanılır. Bu API'yi çağırmak için düğüm adını, adresini veya _local'ı belirtmemiz gerekir.
GET /_nodes/_local
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
………………………………………………
cluster_name" : "elasticsearch",
"nodes" : {
"FKH-5blYTJmff2rJ_lQOCg" : {
"name" : "ubuntu",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1",
"version" : "7.0.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "b7e28a7",
"total_indexing_buffer" : 106502553,
"roles" : [
"master",
"data",
"ingest"
],
"attributes" : {
………………………………………………
Küme Sağlığı
Bu API, 'sağlık' anahtar kelimesini ekleyerek kümenin sağlık durumu hakkında bilgi almak için kullanılır.
GET /_cluster/health
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"cluster_name" : "elasticsearch",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 7,
"active_shards" : 7,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 4,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 63.63636363636363
}
Küme Durumu
Bu API, 'durum' anahtar kelime URL'sini ekleyerek bir küme hakkında durum bilgisi almak için kullanılır. Durum bilgisi sürüm, ana düğüm, diğer düğümler, yönlendirme tablosu, meta veriler ve blokları içerir.
GET /_cluster/state
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
………………………………………………
{
"cluster_name" : "elasticsearch",
"cluster_uuid" : "IzKu0OoVTQ6LxqONJnN2eQ",
"version" : 89,
"state_uuid" : "y3BlwvspR1eUQBTo0aBjig",
"master_node" : "FKH-5blYTJmff2rJ_lQOCg",
"blocks" : { },
"nodes" : {
"FKH-5blYTJmff2rJ_lQOCg" : {
"name" : "ubuntu",
"ephemeral_id" : "426kTGpITGixhEzaM-5Qyg",
"transport
}
………………………………………………
Küme İstatistikleri
Bu API, 'istatistik' anahtar kelimesini kullanarak küme hakkında istatistiklerin alınmasına yardımcı olur. Bu API; parça numarası, depo boyutu, bellek kullanımı, düğüm sayısı, rol, işletim sistemi ve dosya sistemi döndürür.
GET /_cluster/stats
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
………………………………………….
"cluster_name" : "elasticsearch",
"cluster_uuid" : "IzKu0OoVTQ6LxqONJnN2eQ",
"timestamp" : 1556435464704,
"status" : "yellow",
"indices" : {
"count" : 7,
"shards" : {
"total" : 7,
"primaries" : 7,
"replication" : 0.0,
"index" : {
"shards" : {
"min" : 1,
"max" : 1,
"avg" : 1.0
},
"primaries" : {
"min" : 1,
"max" : 1,
"avg" : 1.0
},
"replication" : {
"min" : 0.0,
"max" : 0.0,
"avg" : 0.0
}
………………………………………….
Küme Güncelleme Ayarları
Bu API, 'ayarlar' anahtar kelimesini kullanarak bir kümenin ayarlarını güncellemenize olanak tanır. İki tür ayar vardır - kalıcı (yeniden başlatmalarda uygulanan) ve geçici (tam bir küme yeniden başlatmasından sağ çıkmayın).
Düğüm İstatistikleri
Bu API, kümedeki bir veya daha fazla düğümün istatistiklerini almak için kullanılır. Düğüm istatistikleri neredeyse küme ile aynıdır.
GET /_nodes/stats
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name" : "elasticsearch",
"nodes" : {
"FKH-5blYTJmff2rJ_lQOCg" : {
"timestamp" : 1556437348653,
"name" : "ubuntu",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"roles" : [
"master",
"data",
"ingest"
],
"attributes" : {
"ml.machine_memory" : "4112797696",
"xpack.installed" : "true",
"ml.max_open_jobs" : "20"
},
………………………………………………………….
Hot_threads düğümleri
Bu API, kümedeki her düğümdeki mevcut etkin iş parçacıkları hakkında bilgi almanıza yardımcı olur.
GET /_nodes/hot_threads
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
:::{ubuntu}{FKH-5blYTJmff2rJ_lQOCg}{426kTGpITGixhEzaM5Qyg}{127.0.0.1}{127.0.0.1:9300}{ml.machine_memory=4112797696,
xpack.installed=true, ml.max_open_jobs=20}
Hot threads at 2019-04-28T07:43:58.265Z, interval=500ms, busiestThreads=3,
ignoreIdleThreads=true:
Elasticsearch'de JSON tabanlı sorgu kullanılarak arama yapılır. Bir sorgu iki maddeden oluşur -
Leaf Query Clauses - Bu maddeler, belirli bir alanda belirli bir değeri arayan eşleşme, terim veya aralıktır.
Compound Query Clauses - Bu sorgular, istenen bilgileri çıkarmak için yaprak sorgu cümlelerinin ve diğer bileşik sorguların bir kombinasyonudur.
Elasticsearch çok sayıda sorguyu destekler. Bir sorgu, bir sorgu anahtar sözcüğü ile başlar ve ardından içinde JSON nesnesi biçiminde koşullar ve filtreler içerir. Farklı sorgu türleri aşağıda açıklanmıştır.
Tüm Sorguları Eşleştir
Bu en temel sorgudur; tüm içeriği ve her nesne için 1.0 puanını döndürür.
POST /schools/_search
{
"query":{
"match_all":{}
}
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"took" : 7,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
},
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Tam Metin Sorguları
Bu sorgular, bir bölüm veya bir haber makalesi gibi tüm metnin tamamını aramak için kullanılır. Bu sorgu, o belirli dizin veya belge ile ilişkili analizöre göre çalışır. Bu bölümde, farklı tam metin sorgu türlerini tartışacağız.
Sorguyu eşleştir
Bu sorgu, bir metin veya kelime öbeğini bir veya daha fazla alanın değerleriyle eşleştirir.
POST /schools*/_search
{
"query":{
"match" : {
"rating":"4.5"
}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 44,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.47000363,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 0.47000363,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Çoklu Eşleme Sorgusu
Bu sorgu, birden fazla alan içeren bir metin veya kelime öbeğiyle eşleşiyor.
POST /schools*/_search
{
"query":{
"multi_match" : {
"query": "paprola",
"fields": [ "city", "state" ]
}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 12,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808292,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 0.9808292,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
]
}
}
Sorgu Dizesi Sorgusu
Bu sorgu, sorgu ayrıştırıcı ve sorgu_dizesi anahtar sözcüğünü kullanır.
POST /schools*/_search
{
"query":{
"query_string":{
"query":"beautiful"
}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 60,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
………………………………….
Terim Düzeyinde Sorgular
Bu sorgular esas olarak sayılar, tarihler ve numaralandırmalar gibi yapılandırılmış verilerle ilgilenir.
POST /schools*/_search
{
"query":{
"term":{"zip":"176115"}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
……………………………..
hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 0.9808292,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
}
}
]
…………………………………………..
Aralık Sorgusu
Bu sorgu, verilen değer aralıkları arasında değerlere sahip nesneleri bulmak için kullanılır. Bunun için aşağıdaki gibi operatörler kullanmamız gerekiyor -
- gte - eşitten büyük
- gt - büyüktür
- lte - eşitten küçük
- lt - küçüktür
Örneğin, aşağıda verilen kodu inceleyin -
POST /schools*/_search
{
"query":{
"range":{
"rating":{
"gte":3.5
}
}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 24,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Aşağıdakiler gibi başka terim düzeyi sorgu türleri de vardır:
Exists query - Belirli bir alanın boş olmayan değeri varsa.
Missing query - Bu, var olan sorgunun tam tersidir, bu sorgu, belirli alanlar veya boş değerli alanlar içermeyen nesneleri arar.
Wildcard or regexp query - Bu sorgu, nesnelerdeki desenleri bulmak için normal ifadeler kullanır.
Bileşik Sorgular
Bu sorgular, ve, veya değil veya farklı endeksler için veya işlev çağrıları vb. Gibi Boolean operatörleri kullanılarak birbiriyle birleştirilen farklı sorgular koleksiyonudur.
POST /schools/_search
{
"query": {
"bool" : {
"must" : {
"term" : { "state" : "UP" }
},
"filter": {
"term" : { "fees" : "2200" }
},
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 6,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
Coğrafi Sorgular
Bu sorgular coğrafi konumları ve coğrafi noktaları ele alır. Bu sorgular, herhangi bir yere yakın okulları veya diğer coğrafi nesneleri bulmaya yardımcı olur. Coğrafi nokta veri türünü kullanmanız gerekir.
PUT /geo_example
{
"mappings": {
"properties": {
"location": {
"type": "geo_shape"
}
}
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{ "acknowledged" : true,
"shards_acknowledged" : true,
"index" : "geo_example"
}
Şimdi verileri yukarıda oluşturulan dizine gönderiyoruz.
POST /geo_example/_doc?refresh
{
"name": "Chapter One, London, UK",
"location": {
"type": "point",
"coordinates": [11.660544, 57.800286]
}
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
"_index" : "geo_example",
"_type" : "_doc",
"_id" : "hASWZ2oBbkdGzVfiXHKD",
"_score" : 1.0,
"_source" : {
"name" : "Chapter One, London, UK",
"location" : {
"type" : "point",
"coordinates" : [
11.660544,
57.800286
]
}
}
}
}
Eşleme, bir dizinde saklanan belgelerin ana hatlarını ifade eder. Dinamik olarak eklenen alanların eşlemesini kontrol etmek için geo_point veya string gibi veri türünü ve belgelerde bulunan alanların biçimini ve kuralları tanımlar.
PUT bankaccountdetails
{
"mappings":{
"properties":{
"name": { "type":"text"}, "date":{ "type":"date"},
"balance":{ "type":"double"}, "liability":{ "type":"double"}
}
}
}
Yukarıdaki kodu çalıştırdığımızda, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "bankaccountdetails"
}
Alan Veri Türleri
Elasticsearch, bir belgedeki alanlar için bir dizi farklı veri türünü destekler. Elasticsearch'te alanları depolamak için kullanılan veri türleri burada ayrıntılı olarak tartışılmıştır.
Temel Veri Türleri
Hemen hemen tüm sistemler tarafından desteklenen text, keyword, date, long, double, boolean veya ip gibi temel veri türleridir.
Karmaşık Veri Türleri
Bu veri türleri, temel veri türlerinin birleşimidir. Bunlar, dizi, JSON nesnesi ve yuvalanmış veri türünü içerir. İç içe geçmiş veri türünün bir örneği aşağıda gösterilmektedir & eksi
POST /tabletennis/_doc/1
{
"group" : "players",
"user" : [
{
"first" : "dave", "last" : "jones"
},
{
"first" : "kevin", "last" : "morris"
}
]
}
Yukarıdaki kodu çalıştırdığımızda, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"_index" : "tabletennis",
"_type" : "_doc",
"_id" : "1",
_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Başka bir örnek kod aşağıda gösterilmiştir -
POST /accountdetails/_doc/1
{
"from_acc":"7056443341", "to_acc":"7032460534",
"date":"11/1/2016", "amount":10000
}
Yukarıdaki kodu çalıştırdığımızda, yanıtı aşağıda gösterildiği gibi alıyoruz -
{ "_index" : "accountdetails",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Aşağıdaki komutu kullanarak yukarıdaki belgeyi kontrol edebiliriz -
GET /accountdetails/_mappings?include_type_name=false
Eşleme Türlerinin Kaldırılması
Elasticsearch 7.0.0 veya sonrasında oluşturulan endeksler artık _default_ eşlemeyi kabul etmiyor. 6.x'te oluşturulan endeksler, Elasticsearch 6.x'te eskisi gibi işlemeye devam edecek. Türler, 7.0'da API'lerde kullanımdan kaldırılmıştır.
Bir arama işlemi sırasında bir sorgu işlendiğinde, herhangi bir dizindeki içerik analiz modülü tarafından analiz edilir. Bu modül, analizör, jetonlaştırıcı, jeton filtreleri ve karakter filtrelerinden oluşur. Hiçbir analizör tanımlanmamışsa, varsayılan olarak yerleşik analizörler, belirteçler, filtreler ve belirteçler analiz modülüne kaydedilir.
Aşağıdaki örnekte, başka bir analizör belirtilmediğinde kullanılan standart bir analizör kullanıyoruz. Cümleyi dilbilgisine göre analiz edecek ve cümlede kullanılan kelimeleri üretecektir.
POST _analyze
{
"analyzer": "standard",
"text": "Today's weather is beautiful"
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"tokens" : [
{
"token" : "today's",
"start_offset" : 0,
"end_offset" : 7,
"type" : "",
"position" : 0
},
{
"token" : "weather",
"start_offset" : 8,
"end_offset" : 15,
"type" : "",
"position" : 1
},
{
"token" : "is",
"start_offset" : 16,
"end_offset" : 18,
"type" : "",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 19,
"end_offset" : 28,
"type" : "",
"position" : 3
}
]
}
Standart analizörün yapılandırılması
Özel gereksinimlerimizi elde etmek için standart analizörü çeşitli parametrelerle yapılandırabiliriz.
Aşağıdaki örnekte, standart analizörü max_token_length 5 olacak şekilde yapılandırıyoruz.
Bunun için önce max_length_token parametresine sahip analizör ile bir indeks oluşturuyoruz.
PUT index_4_analysis
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard",
"max_token_length": 5,
"stopwords": "_english_"
}
}
}
}
}
Daha sonra analizörü aşağıda gösterildiği gibi bir metinle uygularız. Başında iki boşluk ve sonunda iki boşluk olduğu için jetonun nasıl görünmediğine lütfen dikkat edin. "Var" kelimesi için, başında bir boşluk ve sonunda bir boşluk vardır. Hepsini alarak boşluklu 4 harf olur ve bu onu bir kelime yapmaz. En azından başında veya sonunda, onu sayılacak bir kelime haline getirmek için boşluk olmayan bir karakter bulunmalıdır.
POST index_4_analysis/_analyze
{
"analyzer": "my_english_analyzer",
"text": "Today's weather is beautiful"
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"tokens" : [
{
"token" : "today",
"start_offset" : 0,
"end_offset" : 5,
"type" : "",
"position" : 0
},
{
"token" : "s",
"start_offset" : 6,
"end_offset" : 7,
"type" : "",
"position" : 1
},
{
"token" : "weath",
"start_offset" : 8,
"end_offset" : 13,
"type" : "",
"position" : 2
},
{
"token" : "er",
"start_offset" : 13,
"end_offset" : 15,
"type" : "",
"position" : 3
},
{
"token" : "beaut",
"start_offset" : 19,
"end_offset" : 24,
"type" : "",
"position" : 5
},
{
"token" : "iful",
"start_offset" : 24,
"end_offset" : 28,
"type" : "",
"position" : 6
}
]
}
Çeşitli analizörlerin listesi ve açıklamaları aşağıda gösterilen tabloda verilmiştir -
S.No | Analizör ve Açıklama |
---|---|
1 | Standard analyzer (standard) Bu analizör için stopwords ve max_token_length ayarı ayarlanabilir. Varsayılan olarak, engellenecek kelimeler listesi boştur ve max_token_length 255'tir. |
2 | Simple analyzer (simple) Bu analizör, küçük harfli belirteçten oluşur. |
3 | Whitespace analyzer (whitespace) Bu analizör, beyaz boşluk belirtecinden oluşur. |
4 | Stop analyzer (stop) stopwords ve stopwords_path yapılandırılabilir. Varsayılan olarak engellenecek kelimeler İngilizce durdurma sözcükleriyle başlatılır ve durdurma sözcükleri_path, durdurma sözcükleriyle bir metin dosyasına giden yolu içerir. |
Tokenizatörler
Tokenlaştırıcılar, Elasticsearch'teki bir metinden jeton oluşturmak için kullanılır. Metin, boşluk veya diğer noktalama işaretleri dikkate alınarak belirteçlere bölünebilir. Elasticsearch, özel analizörde kullanılabilen çok sayıda yerleşik jetonlaştırıcıya sahiptir.
Metni harf olmayan bir karakterle karşılaştığında terimlere ayıran, ancak aynı zamanda tüm terimleri küçük harfle kullanan bir simge oluşturucu örneği aşağıda gösterilmiştir -
POST _analyze
{
"tokenizer": "lowercase",
"text": "It Was a Beautiful Weather 5 Days ago."
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"tokens" : [
{
"token" : "it",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
},
{
"token" : "was",
"start_offset" : 3,
"end_offset" : 6,
"type" : "word",
"position" : 1
},
{
"token" : "a",
"start_offset" : 7,
"end_offset" : 8,
"type" : "word",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 9,
"end_offset" : 18,
"type" : "word",
"position" : 3
},
{
"token" : "weather",
"start_offset" : 19,
"end_offset" : 26,
"type" : "word",
"position" : 4
},
{
"token" : "days",
"start_offset" : 29,
"end_offset" : 33,
"type" : "word",
"position" : 5
},
{
"token" : "ago",
"start_offset" : 34,
"end_offset" : 37,
"type" : "word",
"position" : 6
}
]
}
Tokenizatörlerin bir listesi ve açıklamaları aşağıda verilen tabloda gösterilmektedir -
S.No | Tokenleştirici ve Açıklama |
---|---|
1 | Standard tokenizer (standard) Bu, gramer tabanlı belirteç üzerine inşa edilmiştir ve bu belirteç için max_token_length yapılandırılabilir. |
2 | Edge NGram tokenizer (edgeNGram) Bu belirteç için min_gram, max_gram, token_chars gibi ayarlar ayarlanabilir. |
3 | Keyword tokenizer (keyword) Bu, tüm girdiyi bir çıktı olarak üretir ve bunun için buffer_size ayarlanabilir. |
4 | Letter tokenizer (letter) Bu, harf olmayan biriyle karşılaşılıncaya kadar tüm kelimeyi yakalar. |
Elasticsearch, işlevselliğinden sorumlu olan bir dizi modülden oluşur. Bu modüllerin aşağıdaki gibi iki tür ayarı vardır -
Static Settings- Bu ayarların Elasticsearch'ü başlatmadan önce config (elasticsearch.yml) dosyasında yapılandırılması gerekir. Bu ayarlarla yapılan değişiklikleri yansıtmak için kümedeki tüm ilgili düğümleri güncellemeniz gerekir.
Dynamic Settings - Bu ayarlar canlı Elasticsearch üzerinden ayarlanabilir.
Elasticsearch'ün farklı modüllerini bu bölümün ilerleyen bölümlerinde tartışacağız.
Küme Düzeyinde Yönlendirme ve Parça Tahsisi
Küme düzeyi ayarları, parçaların farklı düğümlere tahsis edilmesine ve kümeyi yeniden dengelemek için parçaların yeniden tahsis edilmesine karar verir. Bunlar, parça tahsisini kontrol etmek için aşağıdaki ayarlardır.
Küme Düzeyinde Parça Tahsisi
Ayar | Olası değer | Açıklama |
---|---|---|
cluster.routing.allocation.enable | ||
herşey | Bu varsayılan değer, her tür kırık için parça tahsisine izin verir. | |
ön seçimler | Bu, yalnızca birincil parçalar için parça tahsisine izin verir. | |
new_primaries | Bu, yalnızca yeni dizinler için birincil kırıklar için parça tahsisine izin verir. | |
Yok | Bu, herhangi bir parça tahsisine izin vermez. | |
cluster.routing.allocation .node_concurrent_recoveries | Sayısal değer (varsayılan olarak 2) | Bu, eşzamanlı parça kurtarma sayısını sınırlar. |
cluster.routing.allocation .node_initial_primaries_recoveries | Sayısal değer (varsayılan olarak 4) | Bu, paralel ilk birincil kurtarmaların sayısını sınırlar. |
cluster.routing.allocation .same_shard.host | Boole değeri (varsayılan olarak yanlış) | Bu, aynı fiziksel düğümde aynı parçanın birden fazla kopyasının tahsisini kısıtlar. |
indices.recovery.concurrent _streams | Sayısal değer (varsayılan olarak 3) | Bu, eş parçalarından parça kurtarma sırasında düğüm başına açık ağ akışlarının sayısını kontrol eder. |
indices.recovery.concurrent _small_file_streams | Sayısal değer (varsayılan olarak 2) | Bu, parça kurtarma sırasında boyutu 5 MB'den küçük olan küçük dosyalar için düğüm başına açık akış sayısını kontrol eder. |
cluster.routing.rebalance.enable | ||
herşey | Bu varsayılan değer, her tür kırık için dengelemeye izin verir. | |
ön seçimler | Bu, yalnızca birincil parçalar için parça dengelemesine izin verir. | |
kopyalar | Bu, yalnızca kopya parçaları için parça dengelemesine izin verir. | |
Yok | Bu, herhangi bir parça dengelemesine izin vermez. | |
cluster.routing.allocation .allow_rebalance | ||
her zaman | Bu varsayılan değer her zaman yeniden dengelemeye izin verir. | |
indices_primaries _active | Bu, kümedeki tüm birincil parçalar tahsis edildiğinde yeniden dengelemeye izin verir. | |
Indices_all_active | Bu, tüm birincil ve kopya parçalar tahsis edildiğinde yeniden dengelemeye izin verir. | |
cluster.routing.allocation.cluster _concurrent_rebalance | Sayısal değer (varsayılan olarak 2) | Bu, kümedeki eşzamanlı parça dengeleme sayısını sınırlar. |
cluster.routing.allocation .balance.shard | Kayan değer (varsayılan olarak 0.45f) | Bu, her düğümde ayrılan parçalar için ağırlık faktörünü tanımlar. |
cluster.routing.allocation .balance.index | Kayan değer (varsayılan olarak 0,55f) | Bu, belirli bir düğüme ayrılan dizin başına parça sayısının oranını tanımlar. |
cluster.routing.allocation .balance.threshold | Negatif olmayan kayan değer (varsayılan olarak 1.0f) | Bu, gerçekleştirilmesi gereken işlemlerin minimum optimizasyon değeridir. |
Disk Tabanlı Parça Tahsisi
Ayar | Olası değer | Açıklama |
---|---|---|
cluster.routing.allocation.disk.threshold_enabled | Boole değeri (varsayılan olarak doğru) | Bu, disk ayırma karar vericisini etkinleştirir ve devre dışı bırakır. |
cluster.routing.allocation.disk.watermark.low | Dize değeri (varsayılan olarak% 85) | Bu, maksimum disk kullanımını gösterir; bu noktadan sonra bu diske başka hiçbir parça ayrılamaz. |
cluster.routing.allocation.disk.watermark.high | Dize değeri (varsayılan olarak% 90) | Bu, ayırma sırasındaki maksimum kullanımı gösterir; Bu noktaya ayırma sırasında ulaşılırsa, Elasticsearch bu parçayı başka bir diske tahsis edecektir. |
cluster.info.update.interval | Dize değeri (varsayılan olarak 30sn) | Bu, disk kullanım kontrolleri arasındaki aralıktır. |
cluster.routing.allocation.disk.include_relocations | Boole değeri (varsayılan olarak doğru) | Bu, disk kullanımını hesaplarken, o anda tahsis edilen parçaların dikkate alınıp alınmayacağına karar verir. |
Keşif
Bu modül, bir kümenin içindeki tüm düğümlerin durumunu keşfetmesine ve korumasına yardımcı olur. Kümenin durumu, bir düğüm eklendiğinde veya buradan silindiğinde değişir. Küme adı ayarı, farklı kümeler arasında mantıksal fark oluşturmak için kullanılır. Bulut satıcıları tarafından sağlanan API'leri kullanmanıza yardımcı olacak bazı modüller vardır ve bunlar aşağıda verilmiştir -
- Azure keşfi
- EC2 keşfi
- Google işlem motoru keşfi
- Zen keşfi
Ağ geçidi
Bu modül, küme durumunu korur ve tam küme yeniden başlatıldığında parça verilerini korur. Aşağıdakiler bu modülün statik ayarlarıdır -
Ayar | Olası değer | Açıklama |
---|---|---|
gateway.expected_nodes | sayısal değer (varsayılan olarak 0) | Yerel kırıkların kurtarılması için kümede olması beklenen düğüm sayısı. |
gateway.expected_master_nodes | sayısal değer (varsayılan olarak 0) | Kurtarma işlemine başlamadan önce kümede olması beklenen ana düğüm sayısı. |
gateway.expected_data_nodes | sayısal değer (varsayılan olarak 0) | Kurtarma işlemine başlamadan önce kümede olması beklenen veri düğümlerinin sayısı. |
gateway.recover_after_time | Dize değeri (varsayılan olarak 5 m) | Bu, disk kullanım kontrolleri arasındaki aralıktır. |
cluster.routing.allocation. disk.include_relocations | Boole değeri (varsayılan olarak doğru) | Bu, kümeye katılan düğümlerin sayısına bakılmaksızın kurtarma işleminin başlamak için bekleyeceği zamanı belirtir. gateway.recover_ after_nodes |
HTTP
Bu modül, HTTP istemcisi ile Elasticsearch API'leri arasındaki iletişimi yönetir. Bu modül, http.enabled değerini false olarak değiştirerek devre dışı bırakılabilir.
Aşağıdakiler bu modülü kontrol etmek için ayarlardır (elasticsearch.yml'de yapılandırılmıştır) -
S.No | Ayar ve Açıklama |
---|---|
1 | http.port Bu, Elasticsearch'e erişmek için bir bağlantı noktasıdır ve 9200-9300 aralığındadır. |
2 | http.publish_port Bu bağlantı noktası http istemcileri içindir ve güvenlik duvarı durumunda da yararlıdır. |
3 | http.bind_host Bu, http hizmeti için bir ana bilgisayar adresidir. |
4 | http.publish_host Bu, http istemcisi için bir ana bilgisayar adresidir. |
5 | http.max_content_length Bu, bir http isteğindeki maksimum içerik boyutudur. Varsayılan değeri 100mb'dir. |
6 | http.max_initial_line_length Bu, maksimum URL boyutudur ve varsayılan değeri 4kb'dir. |
7 | http.max_header_size Bu, maksimum http başlık boyutudur ve varsayılan değeri 8kb'dir. |
8 | http.compression Bu, sıkıştırma desteğini etkinleştirir veya devre dışı bırakır ve varsayılan değeri yanlıştır. |
9 | http.pipelinig Bu, HTTP ardışık düzenini etkinleştirir veya devre dışı bırakır. |
10 | http.pipelining.max_events Bu, bir HTTP isteğini kapatmadan önce sıraya alınacak olayların sayısını sınırlar. |
Endeksler
Bu modül, her indeks için global olarak belirlenen ayarları korur. Aşağıdaki ayarlar esas olarak bellek kullanımıyla ilgilidir -
Şalter
Bu, işlemin bir OutOfMemroyError'a neden olmasını önlemek için kullanılır. Ayar esas olarak JVM yığın boyutunu sınırlar. Örneğin, varsayılan olarak JVM yığınının% 70'ini oluşturan indices.breaker.total.limit ayarı.
Fielddata Önbelleği
Bu, esas olarak bir alanda toplama yapılırken kullanılır. Tahsis etmek için yeterli belleğe sahip olmanız önerilir. Alan veri önbelleği için kullanılan bellek miktarı, indices.fielddata.cache.size ayarı kullanılarak kontrol edilebilir.
Düğüm Sorgu Önbelleği
Bu bellek, sorgu sonuçlarını önbelleğe almak için kullanılır. Bu önbellek En Son Kullanılan (LRU) tahliye politikasını kullanır. Indices.queries.cahce.size ayarı bu önbelleğin bellek boyutunu kontrol eder.
Dizin Oluşturma Tamponu
Bu arabellek, yeni oluşturulan belgeleri dizinde depolar ve arabellek dolduğunda onları temizler. İndices.memory.index_buffer_size gibi ayarlama, bu arabellek için ayrılan yığın miktarını kontrol eder.
Parça İsteği Önbelleği
Bu önbellek, her parça için yerel arama verilerini depolamak için kullanılır. Önbellek, indeks oluşturulması sırasında etkinleştirilebilir veya URL parametresi gönderilerek devre dışı bırakılabilir.
Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true
Endeks Kurtarma
Kurtarma işlemi sırasında kaynakları kontrol eder. Aşağıda ayarlar verilmiştir -
Ayar | Varsayılan değer |
---|---|
indices.recovery.concurrent_streams | 3 |
indices.recovery.concurrent_small_file_streams | 2 |
indices.recovery.file_chunk_size | 512 kb |
indices.recovery.translog_ops | 1000 |
indices.recovery.translog_size | 512 kb |
indices.recovery.compress | doğru |
indices.recovery.max_bytes_per_sec | 40 MB |
TTL Aralığı
Geçerlilik Süresi (TTL) aralığı, bir belgenin zamanını tanımlar ve ardından belge silinir. Aşağıdakiler, bu süreci kontrol etmek için dinamik ayarlardır -
Ayar | Varsayılan değer |
---|---|
indices.ttl.interval | 60'lar |
indices.ttl.bulk_size | 1000 |
Düğüm
Her düğümün veri düğümü olup olmama seçeneği vardır. Bu özelliği değiştirerek değiştirebilirsiniznode.dataayarı. Değeri şu şekilde ayarlamafalse düğümün bir veri düğümü olmadığını tanımlar.
Her indeks için oluşturulan ve indislerin ayarlarını ve davranışını kontrol eden modüllerdir. Örneğin, bir dizinin kaç parça kullanabileceği veya bir birincil parçanın bu dizin için sahip olabileceği çoğaltma sayısı vb. İki tür dizin ayarı vardır -
- Static - Bunlar yalnızca dizin oluşturma sırasında veya kapalı bir dizinde ayarlanabilir.
- Dynamic - Bunlar canlı bir dizinde değiştirilebilir.
Statik Dizin Ayarları
Aşağıdaki tablo statik dizin ayarlarının listesini gösterir -
Ayar | Olası değer | Açıklama |
---|---|---|
index.number_of_shards | Varsayılan 5, Maksimum 1024 | Bir dizinin sahip olması gereken birincil parça sayısı. |
index.shard.check_on_startup | Varsayılan olarak yanlıştır. Doğru olabilir | Açılmadan önce kırıkların bozulup bozulmadığının kontrol edilip edilmeyeceği. |
index.codec | LZ4 sıkıştırması. | Verileri depolamak için kullanılan sıkıştırma türü. |
index.routing_partition_size | 1 | Özel bir yönlendirme değerinin gidebileceği parça sayısı. |
index.load_fixed_bitset_filters_eagerly | yanlış | İç içe geçmiş sorgular için önbelleğe alınmış filtrelerin önceden yüklenip yüklenmediğini gösterir |
Dinamik Dizin Ayarları
Aşağıdaki tablo dinamik dizin ayarlarının listesini göstermektedir -
Ayar | Olası değer | Açıklama |
---|---|---|
index.number_of_replicas | 1'e varsayılan | Her birincil kırığın sahip olduğu kopya sayısı. |
index.auto_expand_replicas | Alt ve üst sınırla (0-5) ayrılmış bir tire | Kümedeki veri düğümlerinin sayısına göre çoğaltma sayısını otomatik olarak genişletin. |
index.search.idle.after | 30 saniye | Bir parçanın, arama boşta olduğu kabul edilene kadar ne kadar süreyle arama alamayacağı veya istek alamayacağı. |
index.refresh_interval | 1 saniye | Dizinde yapılan son değişiklikleri arama için görünür kılan bir yenileme işleminin ne sıklıkla gerçekleştirileceği. |
index.blocks.read_only | 1 doğru / yanlış | Dizin ve dizin meta verilerini salt okunur hale getirmek için true, yazma ve meta veri değişikliklerine izin vermek için false olarak ayarlayın. |
Bazen bir belgeyi dizine eklemeden önce dönüştürmemiz gerekir. Örneğin, belgedeki bir alanı kaldırmak veya bir alanı yeniden adlandırmak ve ardından onu indekslemek istiyoruz. Bu, Ingest düğümü tarafından ele alınır.
Kümedeki her düğümün alma yeteneği vardır, ancak yalnızca belirli düğümler tarafından işlenecek şekilde özelleştirilebilir.
İlgili Adımlar
Besleme düğümünün çalışmasında iki adım vardır -
- Bir ardışık düzen oluşturma
- Bir doküman oluşturmak
Ardışık Düzen Oluşturun
Önce işlemcileri içeren bir ardışık düzen oluşturmak ve ardından aşağıda gösterildiği gibi ardışık düzeni yürütmek -
PUT _ingest/pipeline/int-converter
{
"description": "converts the content of the seq field to an integer",
"processors" : [
{
"convert" : {
"field" : "seq",
"type": "integer"
}
}
]
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"acknowledged" : true
}
Bir Doküman Oluşturun
Daha sonra boru hattı dönüştürücüsünü kullanarak bir belge oluşturuyoruz.
PUT /logs/_doc/1?pipeline=int-converter
{
"seq":"21",
"name":"Tutorialspoint",
"Addrs":"Hyderabad"
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"_index" : "logs",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Daha sonra, aşağıda gösterildiği gibi GET komutunu kullanarak yukarıda oluşturulan dokümanı arıyoruz -
GET /logs/_doc/1
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "logs",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"Addrs" : "Hyderabad",
"name" : "Tutorialspoint",
"seq" : 21
}
}
Yukarıda 21'in tam sayı olduğunu görebilirsiniz.
Boru Hattı Olmadan
Şimdi boru hattını kullanmadan bir belge oluşturuyoruz.
PUT /logs/_doc/2
{
"seq":"11",
"name":"Tutorix",
"Addrs":"Secunderabad"
}
GET /logs/_doc/2
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "logs",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"seq" : "11",
"name" : "Tutorix",
"Addrs" : "Secunderabad"
}
}
Yukarıda 11'in ardışık düzen kullanılmadan bir dizi olduğunu görebilirsiniz.
Dizin yaşam döngüsünü yönetmek, parça boyutu ve performans gereksinimleri gibi faktörlere dayalı yönetim eylemleri gerçekleştirmeyi içerir. Dizin yaşam döngüsü yönetimi (ILM) API'leri, zaman içinde endekslerinizi nasıl yönetmek istediğinizi otomatikleştirmenizi sağlar.
Bu bölüm ILM API'lerinin ve kullanımlarının bir listesini verir.
Politika Yönetimi API'leri
API Adı | Amaç | Misal |
---|---|---|
Yaşam döngüsü politikası oluşturun. | Bir yaşam döngüsü politikası oluşturur. Belirtilen ilke mevcutsa, ilke değiştirilir ve ilke sürümü artırılır. | PUT_ilm / policy / policy_id |
Yaşam döngüsü politikasını alın. | Belirtilen ilke tanımını döndürür. Politika sürümünü ve son değiştirilme tarihini içerir. Politika belirtilmezse, tanımlanan tüm politikaları döndürür. | GET_ilm / policy / policy_id |
Yaşam döngüsü politikasını silin | Belirtilen yaşam döngüsü ilkesi tanımını siler. Şu anda kullanımda olan politikaları silemezsiniz. Politika herhangi bir dizini yönetmek için kullanılıyorsa, istek başarısız olur ve bir hata döndürür. | DELETE_ilm / policy / policy_id |
Dizin Yönetimi API'leri
API Adı | Amaç | Misal |
---|---|---|
Yaşam döngüsü adım API'sine geçin. | Bir dizini manuel olarak belirtilen adıma taşır ve bu adımı yürütür. | POST_ilm / taşı / dizin |
Politikayı yeniden dene. | Politikayı, hatanın oluştuğu adıma geri döndürür ve adımı yürütür. | POST dizini / _ilm / yeniden dene |
İlkeyi dizin API düzenlemesinden kaldırın. | Atanan yaşam döngüsü ilkesini kaldırır ve belirtilen dizini yönetmeyi durdurur. Bir dizin kalıbı belirtilirse, atanan ilkeleri eşleşen tüm dizinlerden kaldırır. | POST dizini / _ilm / kaldır |
Operasyon Yönetimi API'leri
API Adı | Amaç | Misal |
---|---|---|
Dizin yaşam döngüsü yönetimi durum API'sini alın. | ILM eklentisinin durumunu döndürür. Yanıttaki işlem_modu alanı üç durumdan birini gösterir: BAŞLATILDI, DURDURULUYOR veya DURDURULDU. | GET / _ilm / durum |
Dizin yaşam döngüsü yönetimi API'sini başlatın. | Halihazırda durdurulmuşsa ILM eklentisini başlatır. ILM, küme oluşturulduğunda otomatik olarak başlatılır. | POST / _ilm / başlangıç |
Dizin yaşam döngüsü yönetimi API'sini durdurun. | Tüm yaşam döngüsü yönetimi işlemlerini durdurur ve ILM eklentisini durdurur. Bu, kümede bakım gerçekleştirirken ve ILM'nin endeksleriniz üzerinde herhangi bir eylem gerçekleştirmesini önlemeniz gerektiğinde yararlıdır. | POST / _ilm / durdur |
Yaşam döngüsü API'sini açıklayın. | Halihazırda yürütülen aşama, eylem ve adım gibi dizinin geçerli yaşam döngüsü durumu hakkında bilgi alır. Dizinin her birine ne zaman girdiğini, çalışma aşamasının tanımını ve herhangi bir arıza hakkında bilgiyi gösterir. | GET index / _ilm / açıklama |
Elasticsearch'e karşı SQL benzeri sorguların gerçek zamanlı olarak yürütülmesini sağlayan bir bileşendir. Elasticsearch SQL'i hem SQL hem de Elasticsearch'ü anlayan ve Elasticsearch yeteneklerinden yararlanarak verileri gerçek zamanlı olarak okumayı ve işlemeyi kolaylaştıran bir çevirmen olarak düşünebilirsiniz.
Elasticsearch SQL'in Avantajları
It has native integration - Her sorgu, temel depolamaya göre ilgili düğümlere karşı verimli bir şekilde yürütülür.
No external parts - Elasticsearch'ü sorgulamak için ek donanıma, işlemlere, çalışma zamanlarına veya kitaplıklara gerek yok.
Lightweight and efficient - gerçek zamanlı olarak uygun tam metin aramasına izin vermek için SQL'i kucaklar ve ortaya çıkarır.
Misal
PUT /schoollist/_bulk?refresh
{"index":{"_id": "CBSE"}}
{"name": "GleanDale", "Address": "JR. Court Lane", "start_date": "2011-06-02",
"student_count": 561}
{"index":{"_id": "ICSE"}}
{"name": "Top-Notch", "Address": "Gachibowli Main Road", "start_date": "1989-
05-26", "student_count": 482}
{"index":{"_id": "State Board"}}
{"name": "Sunshine", "Address": "Main Street", "start_date": "1965-06-01",
"student_count": 604}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
{
"took" : 277,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "schoollist",
"_type" : "_doc",
"_id" : "CBSE",
"_version" : 1,
"result" : "created",
"forced_refresh" : true,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1,
"status" : 201
}
},
{
"index" : {
"_index" : "schoollist",
"_type" : "_doc",
"_id" : "ICSE",
"_version" : 1,
"result" : "created",
"forced_refresh" : true,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1,
"status" : 201
}
},
{
"index" : {
"_index" : "schoollist",
"_type" : "_doc",
"_id" : "State Board",
"_version" : 1,
"result" : "created",
"forced_refresh" : true,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1,
"status" : 201
}
}
]
}
SQL Sorgusu
Aşağıdaki örnek, SQL sorgusunu nasıl çerçevelendirdiğimizi gösterir -
POST /_sql?format=txt
{
"query": "SELECT * FROM schoollist WHERE start_date < '2000-01-01'"
}
Yukarıdaki kodu çalıştırırken, yanıtı aşağıda gösterildiği gibi alıyoruz -
Address | name | start_date | student_count
--------------------+---------------+------------------------+---------------
Gachibowli Main Road|Top-Notch |1989-05-26T00:00:00.000Z|482
Main Street |Sunshine |1965-06-01T00:00:00.000Z|604
Note - Yukarıdaki SQL sorgusunu değiştirerek farklı sonuç kümeleri elde edebilirsiniz.
Kümenin sağlığını izlemek için, izleme özelliği her düğümden ölçümleri toplar ve bunları Elasticsearch Endekslerinde depolar. Elasticsearch'te izleme ile ilişkili tüm ayarlar, her düğüm için elasticsearch.yml dosyasında veya mümkünse dinamik küme ayarlarında ayarlanmalıdır.
İzlemeye başlamak için, aşağıdaki şekilde yapılabilecek küme ayarlarını kontrol etmemiz gerekiyor -
GET _cluster/settings
{
"persistent" : { },
"transient" : { }
}
Yığındaki her bileşen, kendisini izlemekten ve ardından bu belgeleri hem yönlendirme hem de indeksleme (depolama) için Elasticsearch üretim kümesine iletmekten sorumludur. Elasticsearch'teki yönlendirme ve indeksleme süreçleri, toplayıcılar ve ihracatçılar adı verilen kişiler tarafından yönetilir.
Koleksiyonerler
Collector, izlemeyi seçtiği Elasticsearch'teki genel API'lerden veri almak için her toplama aralığında bir kez çalışır. Veri toplama tamamlandığında veriler, izleme kümesine gönderilmek üzere ihracatçılara toplu olarak verilir.
Toplanan veri türü başına yalnızca bir toplayıcı vardır. Her toplayıcı sıfır veya daha fazla izleme belgesi oluşturabilir.
İhracatçılar
İhracatçılar, herhangi bir Elastic Stack kaynağından toplanan verileri alır ve bunları izleme kümesine yönlendirir. Birden fazla dışa aktarıcı yapılandırmak mümkündür, ancak genel ve varsayılan kurulum tek bir dışa aktarıcı kullanmaktır. İhracatçılar hem düğüm hem de küme düzeyinde yapılandırılabilir.
Elasticsearch'te iki tür ihracatçı vardır -
local - Bu dışa aktarıcı, verileri aynı kümeye geri yönlendirir
http - Verileri HTTP aracılığıyla erişilebilen desteklenen herhangi bir Elasticsearch kümesine yönlendirmek için kullanabileceğiniz tercih edilen dışa aktarıcı.
İhracatçıların izleme verilerini yönlendirmeden önce, belirli Elasticsearch kaynaklarını kurmaları gerekir. Bu kaynaklar, şablonları ve besleme ardışık düzenlerini içerir
Toplama işi, bir dizin deseni tarafından belirtilen dizinlerden gelen verileri özetleyen ve yeni bir dizine yuvarlayan periyodik bir görevdir. Aşağıdaki örnekte, farklı tarih zaman damgalarına sahip sensör adında bir dizin oluşturuyoruz. Ardından, cron işi kullanarak bu endekslerdeki verileri periyodik olarak toplamak için bir toplama işi oluşturuyoruz.
PUT /sensor/_doc/1
{
"timestamp": 1516729294000,
"temperature": 200,
"voltage": 5.2,
"node": "a"
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "sensor",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Şimdi, diğer belgeler için de ikinci bir belge ekleyin.
PUT /sensor-2018-01-01/_doc/2
{
"timestamp": 1413729294000,
"temperature": 201,
"voltage": 5.9,
"node": "a"
}
Bir Toplama İşi Oluşturun
PUT _rollup/job/sensor
{
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"page_size" :1000,
"groups" : {
"date_histogram": {
"field": "timestamp",
"interval": "60m"
},
"terms": {
"fields": ["node"]
}
},
"metrics": [
{
"field": "temperature",
"metrics": ["min", "max", "sum"]
},
{
"field": "voltage",
"metrics": ["avg"]
}
]
}
Cron parametresi, işin ne zaman ve ne sıklıkla etkinleştirileceğini kontrol eder. Bir toplama işinin cron programı tetiklendiğinde, son etkinleştirmeden sonra kaldığı yerden yuvarlanmaya başlayacaktır.
İş çalıştıktan ve bazı verileri işledikten sonra, biraz arama yapmak için DSL Sorgusunu kullanabiliriz.
GET /sensor_rollup/_rollup_search
{
"size": 0,
"aggregations": {
"max_temperature": {
"max": {
"field": "temperature"
}
}
}
}
Sık aranan endeksler hafızada tutulur çünkü onları yeniden oluşturmak ve verimli bir aramaya yardımcı olmak zaman alır. Öte yandan nadiren eriştiğimiz endeksler de olabilir. Bu endekslerin hafızayı işgal etmesi gerekmez ve ihtiyaç duyulduğunda yeniden oluşturulabilir. Bu tür endeksler donmuş endeksler olarak bilinir.
Elasticsearch, her bir parça arandığında dondurulmuş bir dizinin her bir parçasının geçici veri yapılarını oluşturur ve arama tamamlanır tamamlanmaz bu veri yapılarını atar. Elasticsearch bu geçici veri yapılarını bellekte tutmadığından, donmuş indeksler normal indekslerden çok daha az yığın tüketir. Bu, aksi takdirde mümkün olandan çok daha yüksek bir disk-yığın oranına izin verir.
Dondurma ve Çözme Örneği
Aşağıdaki örnek bir dizini dondurur ve çözer -
POST /index_name/_freeze
POST /index_name/_unfreeze
Dondurulmuş endeksler üzerindeki aramaların yavaş çalışması bekleniyor. Dondurulmuş endeksler, yüksek arama yükü için tasarlanmamıştır. Endeksler dondurulmadığında aynı aramalar milisaniyeler içinde tamamlanmış olsa bile, dondurulmuş bir indeks aramanın tamamlanması saniyeler veya dakikalar alabilir.
Dondurulmuş Bir Dizin Arama
Düğüm başına eşzamanlı olarak yüklenen donmuş indislerin sayısı, varsayılan olarak 1 olan search_throttled iş parçacığı havuzundaki evre sayısı ile sınırlıdır. Dondurulmuş dizinleri dahil etmek için, sorgu parametresi - ignore_throttled = false ile bir arama isteği yürütülmelidir .
GET /index_name/_search?q=user:tpoint&ignore_throttled=false
Dondurulmuş Endekslerin İzlenmesi
Dondurulmuş endeksler, arama kısıtlama ve bellek açısından verimli bir parça uygulaması kullanan sıradan endekslerdir.
GET /_cat/indices/index_name?v&h=i,sth
Elasticsearch, herhangi bir java IDE'ye eklenebilen ve Elasticsearch ile ilgili kodu test etmek için kullanılabilen bir jar dosyası sağlar. Elasticsearch tarafından sağlanan çerçeve kullanılarak bir dizi test gerçekleştirilebilir. Bu bölümde, bu testleri ayrıntılı olarak tartışacağız -
- Birim testi
- Entegrasyon testi
- Rastgele test
Önkoşullar
Teste başlamak için, Elasticsearch test bağımlılığını programınıza eklemeniz gerekir. Bu amaçla maven'i kullanabilir ve aşağıdakileri pom.xml'ye ekleyebilirsiniz.
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.1.0</version>
</dependency>
EsSetup, Elasticsearch düğümünü başlatmak ve durdurmak ve ayrıca indeksler oluşturmak için başlatıldı.
EsSetup esSetup = new EsSetup();
createIndex ile esSetup.execute () işlevi endeksleri oluşturacaktır, ayarları, türü ve verileri belirtmeniz gerekir.
Birim Testi
Birim testi JUnit ve Elasticsearch test çerçevesi kullanılarak gerçekleştirilir. Düğüm ve indeksler Elasticsearch sınıfları kullanılarak oluşturulabilir ve testi gerçekleştirmek için test yönteminde kullanılabilir. Bu test için ESTestCase ve ESTokenStreamTestCase sınıfları kullanılır.
Entegrasyon Testi
Entegrasyon testi, bir kümede birden çok düğüm kullanır. Bu test için ESIntegTestCase sınıfı kullanılır. Bir test senaryosu hazırlama işini kolaylaştıran çeşitli yöntemler vardır.
S.No | Yöntem ve Açıklama |
---|---|
1 | refresh() Bir kümedeki tüm endeksler yenilenir |
2 | ensureGreen() Yeşil bir sağlık kümesi durumu sağlar |
3 | ensureYellow() Sarı bir sağlık kümesi durumu sağlar |
4 | createIndex(name) Bu yönteme aktarılan adla dizin oluşturun |
5 | flush() Kümedeki tüm endeksler temizlendi |
6 | flushAndRefresh() flush () ve refresh () |
7 | indexExists(name) Belirtilen dizinin varlığını doğrular |
8 | clusterService() Küme hizmeti java sınıfını döndürür |
9 | cluster() Test kümesi sınıfını döndürür |
Test Kümesi Yöntemleri
S.No | Yöntem ve Açıklama |
---|---|
1 | ensureAtLeastNumNodes(n) Bir kümedeki minimum düğüm sayısının belirtilen sayıdan fazla veya ona eşit olmasını sağlar. |
2 | ensureAtMostNumNodes(n) Bir kümedeki maksimum düğüm sayısının belirtilen sayıdan küçük veya ona eşit olmasını sağlar. |
3 | stopRandomNode() Bir kümedeki rastgele bir düğümü durdurmak için |
4 | stopCurrentMasterNode() Ana düğümü durdurmak için |
5 | stopRandomNonMaster() Ana düğüm olmayan bir kümedeki rastgele bir düğümü durdurmak için. |
6 | buildNode() Yeni bir düğüm oluşturun |
7 | startNode(settings) Yeni bir düğüm başlatın |
8 | nodeSettings() Düğüm ayarlarını değiştirmek için bu yöntemi geçersiz kılın. |
Müşterilere Erişim
İstemci, bir kümedeki farklı düğümlere erişmek ve bazı eylemleri gerçekleştirmek için kullanılır. Rastgele bir istemci almak için ESIntegTestCase.client () yöntemi kullanılır. Elasticsearch, istemciye erişmek için başka yöntemler de sunar ve bu yöntemlere ESIntegTestCase.internalCluster () yöntemi kullanılarak erişilebilir.
S.No | Yöntem ve Açıklama |
---|---|
1 | iterator() Bu, mevcut tüm istemcilere erişmenize yardımcı olur. |
2 | masterClient() Bu, ana düğüm ile iletişim kuran bir istemci döndürür. |
3 | nonMasterClient() Bu, ana düğüm ile iletişim kurmayan bir istemci döndürür. |
4 | clientNodeClient() Bu, şu anda istemci düğümünde olan bir istemciyi döndürür. |
Rastgele Test
Bu test, kullanıcının kodunu mümkün olan her veriyle test etmek için kullanılır, böylece gelecekte herhangi bir veri türünde herhangi bir arıza olmayacaktır. Bu testi gerçekleştirmek için en iyi seçenek rastgele verilerdir.
Rastgele Veri Oluşturma
Bu testte, Random sınıfı, RandomizedTest tarafından sağlanan örnek tarafından başlatılır ve farklı veri türlerini almak için birçok yöntem sunar.
Yöntem | Geri dönüş değeri |
---|---|
getRandom () | Rastgele sınıf örneği |
randomBoolean () | Rastgele boole |
randomByte () | Rastgele bayt |
randomShort () | Rastgele kısa |
randomInt () | Rastgele tam sayı |
randomLong () | Rastgele uzun |
randomFloat () | Rastgele kayan |
randomDouble () | Rastgele çift |
randomLocale () | Rastgele yerel ayar |
randomTimeZone () | Rastgele saat dilimi |
randomFrom () | Diziden rastgele öğe |
İddialar
ElasticsearchAssertions ve ElasticsearchGeoAssertions sınıfları, test sırasında bazı genel kontrolleri gerçekleştirmek için kullanılan iddiaları içerir. Örneğin, burada verilen kodu inceleyin -
SearchResponse seearchResponse = client().prepareSearch();
assertHitCount(searchResponse, 6);
assertFirstHit(searchResponse, hasId("6"));
assertSearchHits(searchResponse, "1", "2", "3", "4",”5”,”6”);
Kibana panosu, görselleştirmelerin ve aramaların bir koleksiyonudur. Gösterge tablosu içeriğini düzenleyebilir, yeniden boyutlandırabilir ve düzenleyebilir ve ardından paylaşabilmek için gösterge tablosunu kaydedebilirsiniz. Bu bölümde, bir gösterge panosunun nasıl oluşturulacağını ve düzenleneceğini göreceğiz.
Gösterge Tablosu Oluşturma
Kibana Ana Sayfasından, aşağıda gösterildiği gibi sol kontrol çubuklarından gösterge tablosu seçeneğini seçin. Bu sizden yeni bir gösterge tablosu oluşturmanızı isteyecektir.
Gösterge tablosuna görselleştirmeler eklemek için, Ekle menüsünü ve mevcut önceden oluşturulmuş görselleştirmelerden birini seçiyoruz. Listeden aşağıdaki görselleştirme seçeneklerini seçtik.
Yukarıdaki görselleştirmeleri seçerken, burada gösterildiği gibi gösterge panosunu elde ederiz. Öğeleri değiştirmek ve yeni öğeleri eklemek için daha sonra gösterge tablosunu ekleyebilir ve düzenleyebiliriz.
Elemanların İncelenmesi
Görselleştirmeler paneli menüsünü seçip ve seçim yaparak Dashboard öğelerini inceleyebiliriz. Inspect. Bu, aynı zamanda indirilebilen öğenin arkasındaki verileri ortaya çıkaracaktır.
Kontrol Paneli Paylaşımı
Gösterge tablosunu paylaş menüsünü seçerek ve aşağıda gösterildiği gibi bir köprü alma seçeneğini belirleyerek paylaşabiliriz -
Kibana ana sayfasında bulunan keşif işlevi, veri kümelerini çeşitli açılardan keşfetmemizi sağlar. Seçili dizin modelleri için verileri arayabilir ve filtreleyebilirsiniz. Veriler genellikle değerlerin belirli bir süreye yayılması şeklinde bulunur.
E-ticaret veri örneğini incelemek için, DiscoverAşağıdaki resimde gösterildiği gibi. Bu, verileri grafikle birlikte getirecektir.
Zamana Göre Filtreleme
Verileri belirli bir zaman aralığına göre filtrelemek için aşağıda gösterildiği gibi zaman filtresi seçeneğini kullanıyoruz. Varsayılan olarak, filtre 15 dakikaya ayarlanmıştır.
Alanlara Göre Filtreleme
Veri seti ayrıca alanlara göre filtrelenebilir. Add Filterseçeneği aşağıda gösterildiği gibi. Burada bir veya daha fazla alan ekliyoruz ve ilgili sonucu filtreler uygulandıktan sonra alıyoruz. Örneğimizde alanı seçiyoruzday_of_week ve sonra bu alanın operatörü is ve değer olarak Sunday.
Ardından, yukarıdaki filtre koşullarıyla Kaydet'i tıklıyoruz. Uygulanan filtre koşullarını içeren sonuç kümesi aşağıda gösterilmiştir.
Veri tablosu, oluşturulmuş bir toplamanın ham verilerini görüntülemek için kullanılan görselleştirme türüdür. Veri tabloları kullanılarak sunulan çeşitli toplama türleri vardır. Bir Veri Tablosu oluşturmak için burada detaylı olarak tartışılan adımlardan geçmemiz gerekir.
Görselleştirin
Kibana Giriş ekranında, Elasticsearch'te depolanan endekslerden görselleştirme ve toplamalar oluşturmamızı sağlayan Visualize seçeneğini buluyoruz. Aşağıdaki görüntü seçeneği göstermektedir.
Veri Tablosu Seçin
Ardından, mevcut çeşitli görselleştirme seçenekleri arasından Veri Tablosu seçeneğini seçiyoruz. Seçenek aşağıdaki görüntüde gösterilmektedir;
Metrikleri Seçin
Ardından, veri tablosu görselleştirmesini oluşturmak için gereken ölçümleri seçiyoruz. Bu seçim, kullanacağımız toplama türüne karar verir. Bunun için e-ticaret veri kümesinden aşağıda gösterilen belirli alanları seçiyoruz.
Veri Tablosu için yukarıdaki yapılandırmayı çalıştırırken, sonucu buradaki resimde gösterildiği gibi alıyoruz -
Bölge Haritaları, bir coğrafi Harita üzerinde ölçümleri gösterir. Değişen yoğunluktaki farklı coğrafi bölgelere tutturulmuş verilere bakmak için kullanışlıdır. Daha koyu gölgeler genellikle daha yüksek değerleri ve daha açık gölgeler daha düşük değerleri gösterir.
Bu görselleştirmeyi oluşturmanın adımları aşağıda ayrıntılı olarak açıklandığı gibidir -
Görselleştirin
Bu adımda, Kibana Giriş ekranının sol çubuğunda bulunan görselleştir düğmesine gidiyoruz ve ardından yeni bir Görselleştirme ekleme seçeneğini seçiyoruz.
Aşağıdaki ekran, bölge Haritası seçeneğini nasıl seçtiğimizi göstermektedir.
Metrikleri Seçin
Bir sonraki ekran, Bölge Haritasını oluştururken kullanılacak ölçümleri seçmemizi ister. Burada metrik olarak Ortalama fiyatı ve görselleştirmeyi oluşturmada kullanılacak paketteki alan olarak country_iso_code seçiyoruz.
Aşağıdaki nihai sonuç, seçimi uyguladığımızda Bölge Haritasını gösterir. Lütfen etikette belirtilen renk tonlarına ve değerlerine dikkat edin.
Pasta grafikler, en basit ve ünlü görselleştirme araçlarından biridir. Verileri, her biri farklı renkte bir dairenin dilimleri olarak temsil eder. Yüzde veri değerleriyle birlikte etiketler daire ile birlikte sunulabilir. Daire ayrıca bir halka şeklini alabilir.
Görselleştirin
Kibana Giriş ekranında, Elasticsearch'te depolanan indekslerden görselleştirme ve toplamalar oluşturmamızı sağlayan Visualize seçeneğini buluyoruz. Yeni bir görselleştirme eklemeyi seçiyoruz ve aşağıda gösterilen seçenek olarak pasta grafiği seçiyoruz.
Metrikleri Seçin
Bir sonraki ekran, Pasta Grafiği oluştururken kullanılacak ölçümleri seçmemizi ister. Burada, metrik olarak temel birim fiyatı ve histogram olarak Kova Toplama sayısını seçiyoruz. Ayrıca minimum aralık 20 olarak seçilmiştir. Böylece fiyatlar aralık olarak 20 değer içeren bloklar halinde gösterilecektir.
Aşağıdaki sonuç, seçimi uyguladıktan sonra pasta grafiğini göstermektedir. Lütfen etikette belirtilen renk tonlarına ve değerlerine dikkat edin.
Pasta Grafik Seçenekleri
Pasta grafiğin altındaki seçenekler sekmesine giderken, pasta grafiğindeki veri görüntüsünün düzeninin yanı sıra görünümü de değiştirmek için çeşitli yapılandırma seçeneklerini görebiliriz. Aşağıdaki örnekte, pasta grafik halka olarak görünür ve etiketler en üstte görünür.
Alan grafiği, çizgi grafiği ile eksenler arasındaki alanın bazı renklerle vurgulandığı çizgi grafiğinin bir uzantısıdır. Çubuk grafik, bir dizi değerde düzenlenen ve ardından eksenlere göre çizilen verileri temsil eder. Yatay çubuklardan veya dikey çubuklardan oluşabilir.
Bu bölümde, Kibana kullanılarak oluşturulan bu üç tür grafiğin tümünü göreceğiz. Önceki bölümlerde tartışıldığı gibi, e-ticaret endeksindeki verileri kullanmaya devam edeceğiz.
Alan Grafiği
Kibana Giriş ekranında, Elasticsearch'te depolanan indekslerden görselleştirme ve toplamalar oluşturmamızı sağlayan Visualize seçeneğini buluyoruz. Yeni bir görselleştirme eklemeyi seçiyoruz ve aşağıda verilen görselde gösterilen seçenek olarak Alan Grafiğini seçiyoruz.
Metrikleri Seçin
Bir sonraki ekran, Alan Grafiğini oluştururken kullanılacak ölçümleri seçmemizi ister. Burada, toplama metriği türü olarak toplamı seçiyoruz. Ardından metrik olarak kullanılacak alan olarak total_quantity alanını seçiyoruz. X ekseninde order_date alanını seçtik ve seriyi verilen metrikle 5 boyutuna böldük.
Yukarıdaki yapılandırmayı çalıştırırken, çıktı olarak aşağıdaki alan grafiğini elde ederiz -
Yatay Çubuk Grafik
Benzer şekilde, Yatay çubuk grafik için Kibana Giriş ekranından yeni görselleştirme seçeriz ve Yatay Çubuk seçeneğini seçeriz. Ardından aşağıdaki resimde gösterildiği gibi ölçümleri seçiyoruz. Burada, dosyalanmış adlandırılmış ürün miktarı için toplama olarak Toplam'ı seçiyoruz. Daha sonra tarla sipariş tarihi için tarih histogramlı kovalar seçiyoruz.
Yukarıdaki yapılandırmayı çalıştırırken, aşağıda gösterildiği gibi yatay bir çubuk grafik görebiliriz -
Dikey Çubuk Grafik
Dikey çubuk grafik için Kibana Giriş ekranından yeni görselleştirme seçiyoruz ve Dikey Çubuk seçeneğini seçiyoruz. Ardından aşağıdaki resimde gösterildiği gibi ölçümleri seçiyoruz.
Burada, ürün miktarı adlı alan için toplama olarak Toplam'ı seçiyoruz. Ardından haftalık aralıklı saha sipariş tarihi için tarih histogramlı kovalar seçiyoruz.
Yukarıdaki yapılandırmayı çalıştırırken, aşağıda gösterildiği gibi bir grafik oluşturulacaktır -
Zaman serisi, belirli bir zaman dizisindeki veri dizisinin temsilidir. Örneğin, ayın ilk gününden son gününe kadar her güne ait veriler. Veri noktaları arasındaki aralık sabit kalır. İçinde zaman bileşeni olan herhangi bir veri kümesi, bir zaman serisi olarak temsil edilebilir.
Bu bölümde, örnek e-ticaret veri kümesini kullanacağız ve bir zaman serisi oluşturmak için her gün için sipariş sayısı sayısını çizeceğiz.
Metrikleri Seçin
İlk olarak, zaman serilerini oluşturmak için kullanılacak dizin desenini, veri alanını ve aralığı seçiyoruz. Örnek e-ticaret veri kümesinden, alan olarak order_date'i ve aralık olarak 1d'yi seçiyoruz. KullanıyoruzPanel OptionsBu seçimleri yapmak için sekmesine tıklayın. Ayrıca, zaman serileri için varsayılan bir renk ve format elde etmek için bu sekmedeki diğer değerleri varsayılan olarak bırakıyoruz.
İçinde Data sekmesinde, toplama seçeneği olarak saymayı seçeriz, her şey olarak seçeneğe göre gruplandırırız ve zaman serisi grafiği için bir etiket koyarız.
Sonuç
Bu konfigürasyonun nihai sonucu aşağıdaki gibi görünür. Lütfen bir zaman aralığı kullandığımızı unutmayınMonth to Datebu grafik için. Farklı zaman dilimleri farklı sonuçlar verecektir.
Bir etiket bulutu, görsel olarak çekici bir biçimde çoğunlukla anahtar kelimeler ve meta verilerden oluşan metni temsil eder. Farklı açılarda hizalanırlar ve farklı renk ve yazı tipi boyutlarında temsil edilirler. Verilerdeki en belirgin terimleri bulmaya yardımcı olur. Önem, terimin sıklığı, etiketin benzersizliği veya belirli terimlere eklenmiş bazı ağırlıklara dayalı olarak bir veya daha fazla faktör tarafından belirlenebilir. Aşağıda bir Etiket Bulutu oluşturma adımlarını görüyoruz.
Görselleştirin
Kibana Giriş ekranında, Elasticsearch'te depolanan indekslerden görselleştirme ve toplamalar oluşturmamızı sağlayan Visualize seçeneğini buluyoruz. Yeni bir görselleştirme eklemeyi seçiyoruz ve aşağıda gösterilen seçenek olarak Etiket Bulutu'nu seçiyoruz -
Metrikleri Seçin
Bir sonraki ekran, Etiket Bulutu oluşturmada kullanılacak ölçümleri seçmemizi ister. Burada, toplama metriği türü olarak sayıyı seçiyoruz. Daha sonra etiket olarak kullanılacak anahtar kelime olarak productname alanını seçiyoruz.
Burada gösterilen sonuç, seçimi uyguladıktan sonra pasta grafiğini gösterir. Lütfen etikette belirtilen renk tonlarına ve değerlerine dikkat edin.
Etiket Bulutu Seçenekleri
Taşınırken optionsEtiket Bulutu sekmesinin altında, Etiket Bulutu'ndaki veri görüntüsünün düzeninin yanı sıra görünümünü değiştirmek için çeşitli yapılandırma seçeneklerini görebiliriz. Aşağıdaki örnekte, Etiket Bulutu hem yatay hem de dikey yönlere yayılmış etiketlerle görünür.
Isı haritası, farklı renk tonlarının grafikteki farklı alanları temsil ettiği bir görselleştirme türüdür. Değerler sürekli değişebilir ve bu nedenle bir rengin renk tonları değerlerle birlikte değişebilir. Hem sürekli değişen verileri hem de ayrık verileri temsil etmek için çok kullanışlıdırlar.
Bu bölümde, bir ısı haritası grafiği oluşturmak için sample_data_flights adlı veri kümesini kullanacağız. Bu belgede, başlangıç ülkesi ve uçuşların varış ülkesi olarak adlandırılan değişkenleri dikkate alıyor ve bir sayıyoruz.
Kibana Giriş ekranında, Elasticsearch'te depolanan indekslerden görselleştirme ve toplamalar oluşturmamızı sağlayan Visualize seçeneğini buluyoruz. Yeni bir görselleştirme eklemeyi seçiyoruz ve aşağıda gösterilen seçenek olarak Isı Haritası'nı seçiyoruz & mimus;
Metrikleri Seçin
Bir sonraki ekran, Isı Haritası Şemasını oluştururken kullanılacak ölçümleri seçmemizi ister. Burada, toplama metriği türü olarak sayıyı seçiyoruz. Ardından Y Eksenindeki kovalar için, OriginCountry alanı için toplama olarak Terimler'i seçiyoruz. X Ekseni için, kullanılacak alan olarak aynı toplamayı ancak DestCountry'yi seçiyoruz. Her iki durumda da kova boyutunu 5 olarak seçiyoruz.
Yukarıda gösterilen yapılandırmayı çalıştırırken, aşağıdaki gibi oluşturulan ısı haritası grafiğini elde ederiz.
Note - Grafiğin etkili bir ısı haritası grafiği oluşturmak için bir yıl boyunca veri toplaması için tarih aralığına Bu Yıl olarak izin vermelisiniz.
Canvas uygulaması, dinamik, çok sayfalı ve piksel mükemmel veri ekranları oluşturmamızı sağlayan Kibana'nın bir parçasıdır. Onu benzersiz ve çekici kılan şey, sadece grafikler ve metrikler değil, infografikler oluşturma becerisidir. Bu bölümde kanvasın çeşitli özelliklerini ve tuval çalışma pedlerinin nasıl kullanılacağını göreceğiz.
Bir Tuvalin Açılması
Kibana ana sayfasına gidin ve aşağıdaki şemada gösterildiği gibi seçeneği seçin. Sahip olduğunuz tuval çalışma pedlerinin listesini açar. Çalışmamız için e-ticaret Gelir izlemeyi seçiyoruz.
Bir Çalışma Alanını Klonlama
Klonladık [eCommerce] Revenue TrackingÇalışmamızda kullanılacak çalışma alanı. Klonlamak için, bu çalışma panelinin adının bulunduğu satırı vurgular ve ardından aşağıdaki şemada gösterildiği gibi klon düğmesini kullanırız -
Yukarıdaki klonun bir sonucu olarak, adında yeni bir çalışma tablası alacağız. [eCommerce] Revenue Tracking – Copy açılışta aşağıdaki infografikleri gösterecektir.
Kategorilere göre toplam satışları ve Geliri güzel resimler ve grafikler ile birlikte açıklar.
Çalışma Alanını Değiştirme
Sağ taraftaki sekmede bulunan seçenekleri kullanarak çalışma panelindeki stil ve şekilleri değiştirebiliriz. Burada, aşağıdaki şemada gösterildiği gibi farklı bir renk seçerek çalışma alanının arka plan rengini değiştirmeyi hedefliyoruz. Renk seçimi hemen yürürlüğe girer ve sonucu aşağıda gösterildiği gibi alırız -
Kibana ayrıca çeşitli kaynaklardan gelen günlük verilerinin görselleştirilmesine yardımcı olabilir. Günlükler, altyapı sağlığı, performans ihtiyaçları ve güvenlik ihlali analizi vb. İçin önemli analiz kaynaklarıdır. Kibana, web sunucusu günlükleri, elasticsearch günlükleri ve bulut gözlem günlükleri gibi çeşitli günlüklere bağlanabilir.
Logstash Günlükleri
Kibana'da görselleştirme için logstash günlüklerine bağlanabiliriz. Önce aşağıda gösterildiği gibi Kibana ana ekranından Logs düğmesini seçiyoruz -
Ardından, bize Logstash'ı bir kaynak olarak seçme seçeneğini getiren Kaynak Yapılandırmasını Değiştir seçeneğini seçiyoruz. Aşağıdaki ekran ayrıca günlük kaynağı olarak sahip olduğumuz diğer seçenek türlerini de gösterir.
Canlı günlük takibi için veri akışı yapabilir veya geçmiş günlük verilerine odaklanmak için akışı duraklatabilirsiniz. Günlükleri akışa alırken, en son günlük konsolun alt kısmında görünür.
Daha fazla referans için Logstash eğitimimize bakabilirsiniz .