Belajar Elasticsearch - Index Management & Document Operations (CRUD)
Episode 4 of 31

Belajar Elasticsearch - Index Management & Document Operations (CRUD)

Membuat dan mengelola index dengan settings dan mapping, dynamic vs explicit mapping, index templates dan aliases, lalu operasi CRUD dokumen: index, get, update, delete, hingga bulk API, routing, dan versioning.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 3 Elasticsearch kalian sudah hidup. Sekarang kita mulai menggunakannya untuk hal yang paling mendasar: menyimpan data dan mengambilnya kembali. Konsep di episode ini — index, dokumen, CRUD, bulk — adalah bahasa sehari-hari yang akan kalian pakai di semua episode berikutnya, jadi pahami dengan baik. Episode 4 membahas dua wilayah: index management (membuat index dengan settings dan mapping, index templates, dan aliases) serta document operations (menambah, membaca, mengubah, dan menghapus dokumen, termasuk bulk API untuk batch dan konsep routing plus versioning).

Membuat Index

Index dibuat dengan PUT dan nama lowercase. Secara default Elasticsearch meng-index semua field secara otomatis (dynamic mapping), tapi untuk kontrol penuh kita tentukan settings dan mapping secara eksplisit:

Buat index dengan settings eksplisit
PUT /produk
Request body: settings dan mapping
{
  "settings": { "number_of_shards": 3, "number_of_replicas": 1, "refresh_interval": "1s" },
  "mappings": {
    "properties": { "name": { "type": "text" }, "price": { "type": "float" } }
  }
}

Di Dev Tools, format di atas langsung ditulis. Dengan curl, gabungkan dengan -X PUT -H 'Content-Type: application/json' -d '{...}'. Perhatikan number_of_shards: nilai ini tidak bisa diubah setelah index dibuat — kalian hanya bisa mengubahnya lewat reindex (episode 13).

Dynamic vs Explicit Mapping

Dynamic mapping membuat Elasticsearch menebak tipe data dari nilai pertama yang masuk: string menjadi text plus keyword, angka menjadi long/float, boolean menjadi boolean. Menebak ini praktis untuk prototyping, tapi berbahaya di production — satu angka seperti ID produk bisa salah diindeks sebagai long padahal seharusnya keyword. Karena itu, production selalu memakai explicit mapping, dan kita bisa mengatur kebijakan dynamic dengan "dynamic": "strict" untuk menolak field tak dikenal. Detail mapping dibahas menyeluruh di episode 5.

Index Templates

Template adalah "cetak biru" yang diterapkan otomatis ke index baru yang cocok dengan pola nama:

Index template untuk index log
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": { "number_of_shards": 2, "number_of_replicas": 1 },
    "mappings": {
      "properties": {
        "@timestamp": { "type": "date" },
        "level": { "type": "keyword" },
        "message": { "type": "text" }
      }
    }
  }
}

Dengan template ini, setiap index baru bernama logs-... otomatis mendapat settings dan mapping yang konsisten — tanpa harus menuliskannya satu per satu. Ini fondasi dari index management as code (episode 28).

Index Aliases

Alias adalah nama alternatif untuk satu atau lebih index. Ini memberi fleksibilitas besar: aplikasi selalu menunjuk ke alias, sementara index di baliknya bisa diganti tanpa mengubah kode — saat terjadi reindex (episode 13), alias membuat perpindahan ke index baru terasa instan bagi aplikasi:

Buat alias dan gunakan untuk menulis
POST /_aliases
Menambahkan dan memindahkan alias
{
  "actions": [
    { "add": { "index": "produk", "alias": "produk-search" } },
    { "remove": { "index": "produk", "alias": "produk-old" } }
  ]
}

Document Operations (CRUD)

Index API: Menambah Dokumen

Menambah dokumen dilakukan dengan POST (biarkan Elasticsearch menentukan _id) atau PUT (tentukan _id sendiri):

Index dokumen dengan ID eksplisit
PUT /produk/_doc/1
Isi dokumen
{ "name": "Kaos Polos Premium", "price": 99000 }

Responsnya berisi _id, _version (dimulai dari 1), dan result bernilai created. Menjalankan PUT yang sama lagi akan menimpa dokumen dengan result: updated dan _version: 2 — ini perilaku upsert.

Get API: Membaca Dokumen

Baca dokumen berdasarkan ID
GET /produk/_doc/1
Contoh respons Get
{
  "_index": "produk",
  "_id": "1",
  "_version": 2,
  "found": true,
  "_source": { "name": "Kaos Polos Premium", "price": 99000 }
}

Jika tidak ingin memuat seluruh _source (yang bisa besar), gunakan filter _source:

Baca hanya field tertentu
GET /produk/_doc/1?_source=name

Update API: Mengubah Sebagian

Update mengubah hanya field yang diberikan tanpa menimpa seluruh dokumen:

Update sebagian field dokumen
POST /produk/_update/1
Mengubah harga saja
{ "doc": { "price": 85000 } }

Field lain tetap utuh, _version bertambah, dan result menjadi updated. Perhatikan: POST /produk/_update/1 adalah operasi scriptable — nanti di episode 13 kita pakai Update By Query untuk mengubah banyak dokumen sekaligus.

Delete API: Menghapus

Hapus dokumen
DELETE /produk/_doc/1
Hapus seluruh index
DELETE /produk

Hati-hati dengan DELETE /produk — index dan semua datanya hilang permanen. Tidak ada tombol undo (kecuali snapshot, episode 20).

Bulk API: Operasi Batch

Mengirim request satu per satu itu boros — tiap request punya overhead HTTP. Bulk API memungkinkan kalian mengirim banyak operasi dalam satu request ke POST /produk/_bulk. Formatnya: dua baris per operasi — baris aksi (index/create/update/delete) dan baris data (kecuali delete):

Format bulk (dua operasi)
{ "index": { "_id": "1" } }
{ "name": "Kaos Polos Premium", "price": 99000 }
{ "update": { "_id": "2" } }
{ "doc": { "price": 75000 } }

Bulk adalah cara tercepat menulis data massal — kita akan menggunakannya untuk indexing performa tinggi di episode 19. Satu request bulk idealnya berisi beberapa ribu dokumen dengan total puluhan megabyte, dan setiap aksi independen: satu gagal tidak menghentikan yang lain.

Routing dan Versioning

Routing menentukan shard mana yang menampung dokumen. Secara default, Elasticsearch menghitung hash dari _id. Kalian bisa mengatur routing manual supaya dokumen dengan kategori yang sama (misalnya category: fashion) selalu jatuh di shard yang sama — bermanfaat untuk pencarian yang sering difilter berdasarkan kategori:

Index dokumen dengan routing manual
PUT /produk/_doc/3?routing=fashion

Dengan routing manual, pencarian bisa membatasi diri ke satu shard saja (GET /produk/_search?routing=fashion), mempercepat query yang sudah tahu kategori targetnya. Trade-off-nya: distribusi data jadi tidak merata jika routing-nya buruk.

Versioning adalah sistem optimistis lock Elasticsearch. Setiap dokumen punya _version yang bertambah tiap perubahan. Kalian bisa mengirim ?version= untuk mencegah penimpaan tak sengaja — jika versi yang dikirim tidak cocok, Elasticsearch menolak dengan status 409 Conflict. Ini menjaga operasi tulis paralel tetap aman.

Tip

Mulai sekarang biasakan pola kerja: template untuk konsistensi, alias untuk fleksibilitas, dan _id yang stabil untuk data yang di-update. Nama index yang baik memakai pola domain-tahun.mm.dd untuk data time-series (misal produk-logs-2026.08.03) — ini akan sangat membantu saat kita bahas data streams dan ILM di episode 10 dan 11.

Penutup

Di episode 4 kalian menguasai pengelolaan index dan operasi dokumen: membuat index dengan settings dan mapping, memahami dynamic vs explicit mapping, memakai index templates dan aliases, lalu menjalankan CRUD lengkap — PUT untuk menambah/menimpa, GET untuk membaca, POST _update untuk mengubah sebagian, DELETE untuk menghapus — plus bulk API untuk batch, routing untuk mengontrol distribusi, dan versioning untuk mencegah konflik tulis.

Inti yang harus dibawa pulang:

  • number_of_shards tidak bisa diubah setelah index dibuat.
  • Dynamic mapping praktis tapi berisiko; production memakai explicit mapping.
  • Alias membuat aplikasi tidak peduli index mana yang sebenarnya dipakai.
  • PUT /_doc/1 bersifat upsert; POST _update hanya mengubah field yang disebut.
  • Bulk API adalah cara tercepat menulis banyak dokumen.
  • Routing mengontrol shard tujuan; versioning mencegah konflik tulis.

Selanjutnya kita masuk lebih dalam ke lapisan yang menentukan bagaimana data kalian dicari: mapping dan data types. Di episode 5 kita bedah perbedaan text vs keyword, tipe numerik, date, boolean, objek dan nested, geo, IP, serta parameter-parameter mapping yang mengatur perilaku tiap field. Sampai jumpa!

Belajar Elasticsearch - Index Management & Document Operations (CRUD) | Belajar Elasticsearch