Elasticsearch - API Dokumen
Elasticsearch menyediakan API dokumen tunggal dan API multi-dokumen, di mana panggilan API masing-masing menargetkan satu dokumen dan beberapa dokumen.
Index API
Ini membantu untuk menambah atau memperbarui dokumen JSON dalam indeks ketika permintaan dibuat untuk indeks tersebut dengan pemetaan tertentu. Misalnya, permintaan berikut akan menambahkan objek JSON ke sekolah indeks dan di bawah pemetaan sekolah -
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"
}
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
Pembuatan Indeks Otomatis
Saat permintaan dibuat untuk menambahkan objek JSON ke indeks tertentu dan jika indeks tersebut tidak ada, maka API ini secara otomatis membuat indeks tersebut dan juga pemetaan yang mendasari untuk objek JSON tersebut. Fungsionalitas ini dapat dinonaktifkan dengan mengubah nilai parameter berikut menjadi false, yang ada di file elasticsearch.yml.
action.auto_create_index:false
index.mapper.dynamic:false
Anda juga dapat membatasi pembuatan indeks secara otomatis, di mana hanya nama indeks dengan pola tertentu yang diperbolehkan dengan mengubah nilai parameter berikut -
action.auto_create_index:+acc*,-bank*
Note - Di sini + menunjukkan diizinkan dan - menunjukkan tidak diizinkan.
Pembuatan Versi
Elasticsearch juga menyediakan fasilitas kontrol versi. Kita dapat menggunakan parameter kueri versi untuk menentukan versi dokumen tertentu.
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"
}
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
Pembuatan versi adalah proses waktu nyata dan tidak terpengaruh oleh operasi pencarian waktu nyata.
Ada dua jenis pembuatan versi yang paling penting -
Versi Internal
Pembuatan versi internal adalah versi default yang dimulai dengan 1 dan bertambah dengan setiap pembaruan, termasuk penghapusan.
Versi Eksternal
Ini digunakan ketika versi dokumen disimpan di sistem eksternal seperti sistem versi pihak ketiga. Untuk mengaktifkan fungsionalitas ini, kita perlu mengatur version_type ke external. Di sini Elasticsearch akan menyimpan nomor versi yang ditentukan oleh sistem eksternal dan tidak akan menaikkannya secara otomatis.
Jenis Operasi
Jenis operasi digunakan untuk memaksa operasi pembuatan. Ini membantu untuk menghindari penimpaan dokumen yang sudah ada.
PUT chapter/_doc/1?op_type=create
{
"Text":"this is chapter one"
}
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Pembuatan ID otomatis
Ketika ID tidak ditentukan dalam operasi indeks, maka Elasticsearch secara otomatis menghasilkan id untuk dokumen itu.
POST chapter/_doc/
{
"user" : "tpoint",
"post_date" : "2018-12-25T14:12:12",
"message" : "Elasticsearch Tutorial"
}
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "PVghWGoB7LiDTeV6LSGu",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Dapatkan API
API membantu mengekstrak tipe objek JSON dengan melakukan permintaan get untuk dokumen tertentu.
pre class="prettyprint notranslate" > GET schools/_doc/5
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_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"
}
}
Operasi ini real time dan tidak terpengaruh oleh refresh rate Indeks.
Anda juga dapat menentukan versinya, lalu Elasticsearch hanya akan mengambil versi dokumen itu.
Anda juga dapat menentukan _all dalam permintaan, sehingga Elasticsearch dapat mencari id dokumen itu di setiap tipe dan itu akan mengembalikan dokumen pertama yang cocok.
Anda juga dapat menentukan bidang yang Anda inginkan dalam hasil Anda dari dokumen tertentu itu.
GET schools/_doc/5?_source_includes=name,fees
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"fees" : 2200,
"name" : "Central School"
}
}
Anda juga dapat mengambil bagian sumber dalam hasil Anda hanya dengan menambahkan bagian _source di permintaan get Anda.
GET schools/_doc/5?_source
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_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"
}
}
Anda juga dapat menyegarkan pecahan sebelum melakukan operasi get dengan menyetel parameter penyegaran ke true.
Hapus API
Anda dapat menghapus indeks, pemetaan, atau dokumen tertentu dengan mengirimkan permintaan HTTP DELETE ke Elasticsearch.
DELETE schools/_doc/4
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
"_shards":{"total":2, "successful":1, "failed":0}
}
Versi dokumen dapat ditentukan untuk menghapus versi tertentu itu. Parameter perutean dapat ditentukan untuk menghapus dokumen dari pengguna tertentu dan operasi gagal jika dokumen tersebut bukan milik pengguna tertentu. Dalam operasi ini, Anda dapat menentukan opsi refresh dan timeout yang sama seperti GET API.
Perbarui API
Skrip digunakan untuk melakukan operasi ini dan pembuatan versi digunakan untuk memastikan bahwa tidak ada pembaruan yang terjadi selama get dan indeks ulang. Misalnya, Anda dapat memperbarui biaya sekolah menggunakan skrip -
POST schools/_update/4
{
"script" : {
"source": "ctx._source.name = params.sname",
"lang": "painless",
"params" : {
"sname" : "City Wise School"
}
}
}
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "4",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
Anda dapat memeriksa pembaruan dengan mengirimkan permintaan get ke dokumen yang diperbarui.