Elasticsearch - Konvensi API

Application Programming Interface (API) dalam web adalah sekumpulan panggilan fungsi atau instruksi pemrograman lainnya untuk mengakses komponen perangkat lunak dalam aplikasi web tersebut. Misalnya, API Facebook membantu pengembang membuat aplikasi dengan mengakses data atau fungsi lain dari Facebook; itu bisa berupa tanggal lahir atau pembaruan status.

Elasticsearch menyediakan REST API, yang diakses oleh JSON melalui HTTP. Elasticsearch menggunakan beberapa konvensi yang akan kita bahas sekarang.

Beberapa Indeks

Sebagian besar operasi, terutama pencarian dan operasi lainnya, di API ditujukan untuk satu atau lebih dari satu indeks. Ini membantu pengguna untuk mencari di banyak tempat atau semua data yang tersedia hanya dengan mengeksekusi kueri satu kali. Banyak notasi berbeda digunakan untuk melakukan operasi dalam beberapa indeks. Kami akan membahas beberapa di antaranya di sini, di bab ini.

Notasi yang Dipisahkan Koma

POST /index1,index2,index3/_search

Badan Permintaan

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

Tanggapan

Objek JSON dari index1, index2, index3 memiliki any_string di dalamnya.

_all Kata Kunci untuk Semua Indeks

POST /_all/_search

Badan Permintaan

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

Tanggapan

JSON objek dari semua indeks dan memiliki any_string di dalamnya.

Karakter pengganti (*, +, -)

POST /school*/_search

Badan Permintaan

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Tanggapan

JSON objek dari semua indeks yang dimulai dengan sekolah yang memiliki CBSE di dalamnya.

Sebagai alternatif, Anda juga dapat menggunakan kode berikut -

POST /school*,-schools_gov /_search

Badan Permintaan

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Tanggapan

Objek JSON dari semua indeks yang dimulai dengan "sekolah" tetapi tidak dari sekolah_gov dan memiliki CBSE di dalamnya.

Ada juga beberapa parameter string kueri URL -

  • ignore_unavailable- Tidak ada kesalahan yang akan terjadi atau tidak ada operasi yang akan dihentikan, jika satu atau lebih indeks yang ada di URL tidak ada. Misalnya, indeks sekolah ada, tetapi toko buku tidak ada.

POST /school*,book_shops/_search

Badan Permintaan

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Badan Permintaan

{
   "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
}

Perhatikan kode berikut -

POST /school*,book_shops/_search?ignore_unavailable = true

Badan Permintaan

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Respon (tidak ada kesalahan)

JSON objek dari semua indeks yang dimulai dengan sekolah yang memiliki CBSE di dalamnya.

allow_no_indices

truenilai parameter ini akan mencegah kesalahan, jika URL dengan karakter pengganti tidak menghasilkan indeks. Misalnya, tidak ada indeks yang dimulai dengan sekolah_sekolah -

POST /schools_pri*/_search?allow_no_indices = true

Badan Permintaan

{
   "query":{
      "match_all":{}
   }
}

Respon (Tidak ada kesalahan)

{
   "took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0},
   "hits":{"total":0, "max_score":0.0, "hits":[]}
}

expand_wildcards

Parameter ini memutuskan apakah karakter pengganti perlu diperluas untuk membuka indeks atau indeks tertutup atau melakukan keduanya. Nilai parameter ini bisa terbuka dan tertutup atau tidak ada dan semuanya.

Misalnya, sekolah indeks dekat -

POST /schools/_close

Tanggapan

{"acknowledged":true}

Perhatikan kode berikut -

POST /school*/_search?expand_wildcards = closed

Badan Permintaan

{
   "query":{
      "match_all":{}
   }
}

Tanggapan

{
   "error":{
      "root_cause":[{
         "type":"index_closed_exception", "reason":"closed", "index":"schools"
      }],
      "type":"index_closed_exception", "reason":"closed", "index":"schools"
   }, "status":403
}

Tanggal Dukungan Matematika dalam Nama Indeks

Elasticsearch menawarkan fungsionalitas untuk mencari indeks menurut tanggal dan waktu. Kami perlu menentukan tanggal dan waktu dalam format tertentu. Misalnya, accountdetail-2015.12.30, indeks akan menyimpan rincian rekening bank pada tanggal 30 Desember 2015. Operasi matematika dapat dilakukan untuk mendapatkan rincian untuk tanggal tertentu atau rentang tanggal dan waktu.

Format untuk nama indeks matematika tanggal -

<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search

static_name adalah bagian dari ekspresi yang tetap sama di setiap indeks matematika tanggal seperti detail akun. date_math_expr berisi ekspresi matematika yang menentukan tanggal dan waktu secara dinamis seperti now-2d. date_format berisi format di mana tanggal ditulis dalam indeks seperti YYYY.MM.dd. Jika tanggal hari ini adalah 30 Desember 2015, maka <accountdetail- {now-2d {YYYY.MM.dd}}> akan mengembalikan accountdetail-2015.12.28.

Ekspresi Memutuskan untuk
<accountdetail- {now-d}> akundetail-2015.12.29
<accountdetail- {now-M}> accountdetail-2015.11.30
<accountdetail- {sekarang {YYYY.MM}}> akundetail-2015.12

Kami sekarang akan melihat beberapa opsi umum yang tersedia di Elasticsearch yang dapat digunakan untuk mendapatkan respons dalam format tertentu.

Hasil Cantik

Kita bisa mendapatkan respons dalam objek JSON yang diformat dengan baik hanya dengan menambahkan parameter kueri URL, yaitu pretty = true.

POST /schools/_search?pretty = true

Badan Permintaan

{
   "query":{
      "match_all":{}
   }
}

Tanggapan

……………………..
{
   "_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"
   }
}
………………….

Output yang Dapat Dibaca Manusia

Opsi ini dapat mengubah respons statistik baik menjadi bentuk yang dapat dibaca manusia (Jika manusia = benar) atau bentuk yang dapat dibaca komputer (jika manusia = salah). Sebagai contoh, jika human = true maka distance_kilometer = 20KM dan jika human = false maka distance_meter = 20000, saat respon perlu digunakan oleh program komputer lain.

Filter Respon

Kita bisa memfilter respons ke lebih sedikit bidang dengan menambahkannya di parameter field_path. Sebagai contoh,

POST /schools/_search?filter_path = hits.total

Badan Permintaan

{
   "query":{
      "match_all":{}
   }
}

Tanggapan

{"hits":{"total":3}}