Troubleshooting
Mapping Conflict & Tipe Field
Mapping di Elasticsearch mendefinisikan tipe setiap field. Begitu sebuah field punya data, tipenya tidak bisa diubah. Mencoba mengubahnya memunculkan error mapper cannot be changed. Panduan ini menjelaskan kenapa mapping immutable, perbedaan dynamic vs strict, dan solusi resmi: reindex ke index baru dengan mapping yang benar.
Solusi: Reindex ke Index Baru
Karena tipe tak bisa diubah di tempat, buat index baru dengan mapping benar lalu salin data.
- Periksa mapping lama
GET /produk/_mapping untuk melihat tipe field saat ini.
- Buat index baru dengan mapping benar
Definisikan tipe yang diinginkan secara eksplisit.
- Reindex data
Salin seluruh dokumen dari index lama ke baru.
- Alihkan alias
Pindahkan alias agar aplikasi langsung memakai index baru tanpa downtime.
# 1) index baru dengan tipe benar + multi-field
PUT /produk-v2
{
"mappings": {
"properties": {
"harga": { "type": "long" },
"nama": {
"type": "text",
"fields": { "keyword": { "type": "keyword", "ignore_above": 256 } }
}
}
}
}
# 2) reindex
POST /_reindex
{
"source": { "index": "produk" },
"dest": { "index": "produk-v2" }
}
# 3) alihkan alias tanpa downtime
POST /_aliases
{
"actions": [
{ "remove": { "index": "produk", "alias": "produk-live" } },
{ "add": { "index": "produk-v2", "alias": "produk-live" } }
]
}
Selalu akses index lewat alias (mis. produk-live) sejak awal. Dengan begitu reindex dan pergantian mapping di masa depan bisa dilakukan tanpa mengubah kode aplikasi. Lihat panduan Reindex Tanpa Downtime untuk detail.