Elasticsearch - Belge API'leri

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 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 false 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ü, bir 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, Elasticsearch'ün her türde bu belge kimliğini arayabilmesi ve ilk eşleşen belgeyi döndürmesi için istekte _all'ı da belirtebilirsiniz.

  • 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 yalnızca _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.