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.