HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Elasticsearch kurulumu

Bu kurulumda Ubuntu 14.04 kullanılmıştır. Ancak Ubuntu 16.04 ve Debian için de kurulum benzerdir. ElasticSearch en iyi performans için Oracle Java'ya ihtiyaç duymaktadır.

java -version

ile java sürümü ve Oracle mı yoksa OpenJDK mı olduğu kontrol edilebilir. Elasticsearch kurulumu yapabilmek için öncelikle sisteminizde OpenJDK veya OracleJDK kurulu olmalıdır. Ubuntu'da güncel OpenJDK ile sorunsuz çalışmakla birlikte, Debian 7 sürümünde Oracle JDK kurulumu gerektirdi. Yine de OracleJDK kullanmakta fayda var.

Ubuntu'da OracleJDK kurulumu:

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

Ubuntu'da herşey yolundaysa java -version çıktısı şöyle birşey olacaktır:

java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)

Java8 environment variable'ları otomatik olarak SET etmek için şunu da kurun:

$ sudo apt-get install oracle-java8-set-default

Elasticsearch deb paketi üzerinden kurulabilir. Kurmadan önce güncel dökümana bakınız.

Cluster Sağlığı

Cluster'ın sağlık durumu curl ile (veya herhangi bir HTTP client ile) kontrol edilebilir.

$ curl localhost:9200/_cat/health?v
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks
1433787314 21:15:14  elasticsearch yellow          2         2    121  70    0    0       19            -1

Cluster Durumu

$ curl localhost:9200/_cluster/health?v
{"cluster_name":"aiscluster","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":60,"active_shards":60,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":60,"number_of_pending_tasks":0}

Cluster Stats

$ curl localhost:9200/_cluster/stats?v

Node'ların Kontrolü

$ curl localhost:9200/_cat/nodes?v
host  ip            heap.percent ram.percent load node.role master name
ais   193.140.28.40           14           5 0.01 d         m      Skullcrusher
devel 193.140.28.40           23          42 0.03 d         *      Mr. M

elasticsearch cluster olarak tüm network'te broadcast yaptığı için devel vb. makinalarda görünür durumda.

Indexlerin Kontrolü

$ curl localhost:9200/_cat/indices?v
health status index               pri rep docs.count docs.deleted store.size pri.store.size
yellow open   countries             5   1        229            0     33.6kb         33.6kb
yellow open   imports               5   1         15            0     20.6kb         20.6kb
yellow open   programs              5   1          1            0        3kb            3kb
yellow open   categories            5   1          4            0      8.2kb          8.2kb
yellow open   faculties             5   1         36            0     16.7kb         16.7kb
yellow open   users                 5   1       6573         3006      2.5mb          2.5mb
yellow open   cities                5   1        126            0     23.1kb         23.1kb
yellow open   courses               5   1          2            0      5.6kb          5.6kb
yellow open   certificate_periods   5   1          1            0        5kb            5kb
yellow open   exam_languages        5   1        156            0     26.2kb         26.2kb
yellow open   examinations          5   1          3            0      8.7kb          8.7kb
yellow open   certificates          5   1          1            0      3.1kb          3.1kb
yellow open   departments           5   1        139            0       36kb           36kb
yellow open   direct_payments       5   1       1626            0    491.5kb        491.5kb
yellow open   exam_centers          5   1          2            0      6.5kb          6.5kb
yellow open   order_transactions    5   1       4163            0      1.8mb          1.8mb

Yeni Bir Index Oluşturma

Customer adında bir index oluşturalım ve pretty ekleyerek JSON yanıtının güzel görünmesini söyleyelim.

$ curl -XPUT 'localhost:9200/customer?pretty
{
  "acknowledged" : true
}

Yeni oluşan customer index'i şuan yellow durumda bunun sebebi ise bazı replikaların henüz ayrılmamış olması. Çünkü elasticsearch default olarak bu indexe bir tane replika oluşturdu ve şuan çalışan bir tane node'umuz var. Bu yüzden de bir replikamız, başka bir node eklenene kadar ayrılamıyor. Bu replika, başka bir node'a ayrılana kadar sarı durumda kalacak - başka node'a gittiği zaman ise durum yeşile dönecek.

Bir Dökümanı Indexe Ekleme

Customer index'imize external" tipinde ve 1 ID'li herhangi bir döküman eklemek için:

$ curl -XPUT 'localhost:9200/customer/external/1?pretty' -d
{
 "name": "John Doe"
}
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "created" : true
}

Eğer bir döküman olmayan bir index'e eklenmeye çalışılırsa - o index otomatik olarak oluşturulur. Bir dökümanı ayrıca ID belirtmeden de index'e ekleyebiliriz. Bu durumda elasticsearch o döküman için otomatik olarak ID oluşturur. Dikkat edilmesi gereken nokta, ID belirtildiğinde PUT, belirtilmediğinde POST kullanılmasıdır.

Dökümanı Index'e ID ile ekleme:

$ curl -XPUT 'localhost:9200/customer/external/2?pretty' -d
{
  "name": "Jane Doe"
}
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "2",
  "_version" : 1,
  "created" : true
}

Dökümanı Index'e ID'siz ekleme:

$ curl -XPOST 'localhost:9200/customer/external?pretty' -d
{
  "name": "Jane Doe"
}
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "AU3UjHLvwrmM0pH9MeyT",
  "_version" : 1,
  "created" : true
}

Index'ten Dökümanı Görüntüleme

$ curl -XGET 'localhost:9200/customer/external/1?pretty

Bir Index'i Silme

$ curl -XDELETE 'localhost:9200/customer?pretty

Tüm Index'leri Silme

$ curl -XDELETE 'http://localhost:9200/_all/

API Yapısı

Elasticsearch sorgularının tümü RESTful bir yapıya sahiptir. Aşağıda ki yapı kavrandığında tüm işlemlere uygulanabilir:

$ curl -X<REST Verb><Node>:<Port><Index>/<Type>/<ID>

Dökümanların Yerini Değiştirme

Bir dökümanın yerini değiştirmek için, bir dökümanı index'e ekleme işlemi aynen yapılır.

$ curl -XPUT 'localhost:9200/customer/external/1?pretty' -d
{
  "name": "Serhat Dundar"
}

Yukarıda ki komut ID'si 1 olan John Doe kaydını - Serhat Dundar kaydı ile yer değiştirir. Aynı Ruby'de ki hash mantığı gibi - ekleme ve değiştirme aynı şekilde yapılıyor.

Dökümanları Güncelleme

$ curl -XPOST 'localhost:9200/customer/external/2/_update?pretty -d
{
  "doc": { "name": "Jane Doe" }
}

Ayrıca herhangi bir document'e başka bir alanda ekleyebiliriz:

$ curl -XPOST 'localhost:9200/customer/external/2/_update?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}

Dökümanları Silme

Tek bir dökümanı silme:

$ curl -XDELETE 'localhost:9200/customer/external/2?pretty

Bir kriterle eşleşen bütün dökümanları silme:

$ curl -XDELETE 'localhost:9200/customer/external/_query?pretty -d
{
  "query": { "match": { "name": "John" } }
}

Bir Node'u Kapatma

$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_shutdown

Shard'ları Kontrol Etme

$ curl 'localhost:9200/_cat/shards?v'

Dynamic Allocation

$ curl -XPUT 'localhost:9200/_cluster/settings -d
{ "transient" : {
  "cluster.routing.allocation.enable" : "all"
  }
}

Konfigürasyon

Bir paket nereye kurulmuş görmek için:

$ dpkg -L elasticsearch

Elasticsearch konfigürasyonu muhtemelen şurada olacak:

$ nano /etc/elasticsearch/elasticsearch.yml

Başarılar.


Share this post!


Blog Comments powered by Disqus.