All Products
Search
Document Center

Elasticsearch:Konfigurasikan dan gunakan sinonim

Last Updated:Jun 24, 2026

Dalam skenario pencarian, pengguna sering menggunakan kata-kata berbeda untuk menyatakan konsep yang sama, seperti "cell phone" dan "smartphone." Hal ini dapat menyebabkan hasil pencarian yang tidak lengkap. Fitur sinonim mengatasi masalah ini dengan memperlakukan istilah-istilah tersebut sebagai setara, memperluas cakupan pencarian, meningkatkan tingkat recall, dan meningkatkan pengalaman pengguna.

Sebelum Anda mulai

Sebelum mengubah file sinonim, pastikan hal-hal berikut:

  • Pastikan indeks kritis memiliki setidaknya satu shard replika untuk menjaga ketersediaan layanan selama restart node tunggal. (Menghapus kamus memicu restart kluster.)

  • Monitor kluster untuk memastikan beban berada pada tingkat yang sehat (disarankan: Penggunaan CPU < 60%, Penggunaan memori heap < 50%).

    Hubungkan ke kluster Anda dan jalankan GET /_nodes/stats/jvm?filter_path=nodes.*.jvm.mem.heap_* untuk memeriksa Penggunaan CPU dan memori heap di semua node.

Cara kerja dan pengambilan keputusan

Panduan ini membandingkan dua metode konfigurasi sinonim beserta pertimbangan masing-masing untuk membantu Anda memilih pendekatan terbaik sesuai kebutuhan.

Aturan sintaks sinonim

File sinonim harus berupa file .txt ber-encoding UTF-8. Setiap baris dalam file mendefinisikan aturan sinonim dalam salah satu dari dua format berikut:

  • Sinonim setara (format Solr)
    Istilah yang dipisahkan koma diperlakukan sebagai sepenuhnya setara. Pencarian satu istilah akan mencocokkan dokumen yang berisi istilah apa pun dalam kelompok tersebut.

    # Contoh: Pencarian "phone", "smartphone", dan "mobile phone" menghasilkan hasil yang sama.
    phone,smartphone,mobile phone
    ipod,i-pod,i pod
  • Pemetaan searah (format WordNet)
    Gunakan => untuk memetakan sekumpulan istilah ke satu istilah kanonis. Ini sering digunakan untuk normalisasi, di mana istilah non-standar dipetakan ke istilah yang disukai.

    # Contoh: Petakan "usa" dan "us" ke "United States".
    usa,us => United States

Perbandingan metode konfigurasi

Anda dapat mengonfigurasi sinonim dengan mengunggah file atau menentukannya secara inline dalam konfigurasi indeks. Tabel berikut membandingkan kedua metode tersebut.

Item

Metode 1: Unggah file

Metode 2: Definisikan inline

Cara mengonfigurasi

Unggah file .txt ke kluster dan rujuk dalam settings indeks menggunakan parameter synonyms_path.

Masukkan aturan sinonim langsung ke dalam synonym filter pada pengaturan indeks.

Kelebihan

  • Mudah mengelola dan menggunakan kembali kamus besar.

  • Memisahkan kamus dari konfigurasi indeks, sehingga dapat dibagikan lintas beberapa indeks.

  • Pembaruan langsung berlaku tanpa restart kluster.

  • Cocok untuk kumpulan sinonim kecil yang jarang berubah.

Kekurangan

Indeks yang sudah ada tidak dapat memuat kamus baru secara dinamis.

  • Sulit digunakan kembali karena aturan harus didefinisikan terpisah untuk setiap indeks.

  • Tidak cocok untuk mengelola kamus besar atau kompleks.

Kasus penggunaan

Gunakan ketika kamus stabil, jarang berubah, dan perlu dibagikan lintas beberapa indeks.

Gunakan ketika Ketersediaan tinggi sangat penting atau ketika Anda perlu memperbarui sinonim secara sering dan cepat.

Prosedur

Metode 1: Unggah file sinonim (dapat digunakan kembali)

Metode ini paling cocok untuk kamus yang jarang berubah.

Langkah 1: Unggah file sinonim

Contoh ini menunjukkan cara mengonfigurasi sinonim menggunakan filter dengan file uji bernama aliyun_synonyms.txt, yang berisi entri: begin, start.

  1. Masuk ke Konsol Alibaba Cloud Elasticsearch. Pilih Wilayah dan kelompok sumber daya tempat instans Anda berada, lalu klik ID instans target.

  2. Di panel navigasi kiri, pilih Configuration and Management > Cluster Configuration. Di bagian Basic Configuration, temukan Synonym Configuration dan klik Upload.

  3. Di panel yang muncul, klik Configure dan pilih metode unggah:

    File harus memiliki ekstensi .txt. Nama file boleh berisi huruf kapital, huruf kecil, angka, dan garis bawah (_), serta tidak boleh melebihi 30 karakter.
    • Upload File: Pilih file .txt sinonim dari mesin lokal Anda.

    • Add OSS File: Masukkan nama bucket dan nama file sinonim, lalu klik Add.

      Batasan: Bucket OSS harus berada di Wilayah yang sama dengan instans Alibaba Cloud Elasticsearch.
  4. Klik Save dan konfirmasi operasi.

Langkah 2: Buat indeks dan rujuk file tersebut

Tunggu hingga instans kembali ke status Active. Kemudian, hubungkan ke kluster dan buat indeks yang menggunakan file sinonim yang diunggah.

PUT /aliyun-index-test
{
  "settings": {
    "index":{
      "analysis": {
          "analyzer": {
            "by_smart": {
              "type": "custom",
              "tokenizer": "ik_smart",
              "filter": ["by_tfr","by_sfr"],
              "char_filter": ["by_cfr"]
            },
            "by_max_word": {
              "type": "custom",
              "tokenizer": "ik_max_word",
              "filter": ["by_tfr","by_sfr"],
              "char_filter": ["by_cfr"]
            }
         },
         "filter": {
            "by_tfr": {
              "type": "stop",
              "stopwords": [" "]
              },
           "by_sfr": {
              "type": "synonym",
              "synonyms_path": "analysis/aliyun_synonyms.txt"
              }
          },
          "char_filter": {
            "by_cfr": {
              "type": "mapping",
              "mappings": ["| => |"]
            }
          }
      }
    }
  }
}
Sintaks pembuatan indeks bervariasi tergantung versi kluster. Untuk informasi lebih lanjut, lihat Contoh operasi indeks untuk versi Elasticsearch umum.

Langkah 3: Konfigurasikan bidang title

  • Untuk versi Elasticsearch sebelum 7.0

    PUT /aliyun-index-test/_mapping/doc
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "by_max_word",
       "search_analyzer": "by_smart"
     }
    }
    }
  • Untuk Elasticsearch 7.0 dan versi setelahnya

    PUT /aliyun-index-test/_mapping/
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "by_max_word",
       "search_analyzer": "by_smart"
     }
    }
    }

Langkah 4: Verifikasi konfigurasi

Gunakan API _analyze untuk memverifikasi bahwa alat analisis telah memuat sinonim dengan benar. Contoh ini mengasumsikan file sinonim berisi begin,start.

GET /aliyun-index-test/_analyze
{
"analyzer": "by_smart",
"text":"begin"
}

Tanggapan yang berhasil mencakup token begin dan start.

{
  "tokens" : [
    {
      "token" : "begin",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "start",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "SYNONYM",
      "position" : 0
    }
  ]
}

Langkah 5: Uji hasil pencarian

  1. Indeks dua dokumen, masing-masing berisi salah satu istilah sinonim.

    PUT /aliyun-index-test/doc/1
    {
    "title": "Shall I begin?"
    }
    PUT /aliyun-index-test/doc/2
    {
    "title": "I start work at nine."
    }
  2. Cari salah satu istilah, misalnya begin. Pencarian akan mengembalikan dokumen yang berisi begin dan start.

    GET /aliyun-index-test/_search
    {
     "query" : { "match" : { "title" : "begin" }},
     "highlight" : {
         "pre_tags" : ["<red>", "<blue>"],
         "post_tags" : ["</red>", "</blue>"],
         "fields" : {
             "title" : {}
         }
     }
    }

    Respons:

    {
      "took" : 70,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 2,
          "relation" : "eq"
        },
        "max_score" : 0.28247005,
        "hits" : [
          {
            "_index" : "aliyun-index-test",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 0.28247005,
            "_source" : {
              "title" : "Shall I begin?"
            },
            "highlight" : {
              "title" : [
                "Shall I <red>begin</red>?"
              ]
            }
          },
          {
            "_index" : "aliyun-index-test",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 0.25069216,
            "_source" : {
              "title" : "I start work at nine."
            },
            "highlight" : {
              "title" : [
                "I <red>start</red> work at nine."
              ]
            }
          }
        ]
      }
    }
    

Metode 2: Konfigurasi inline (tidak dapat digunakan kembali)

Metode ini melibatkan penulisan aturan sinonim langsung ke dalam konfigurasi indeks dan paling cocok untuk kamus kecil yang memerlukan pembaruan sering.

Langkah 1: Buat indeks dan definisikan sinonim

Hubungkan ke kluster dan definisikan aturan sinonim langsung dalam array synonyms saat membuat indeks.

PUT /my_index
{
 "settings": {
     "analysis": {
         "analyzer": {
             "my_synonyms": {
                 "filter": [
                     "lowercase",
                     "my_synonym_filter"
                 ],
                 "tokenizer": "ik_smart"
             }
         },
         "filter": {
             "my_synonym_filter": {
                 "synonyms": [
                     "begin,start"
                 ],
                 "type": "synonym"
             }
         }
     }
 }
}

Perintah ini membuat indeks bernama my_index dan mengonfigurasi analisis teks kustom. Berikut cara kerjanya:
Saat bidang teks menggunakan alat analisis my_synonyms, Pemisah kata ik_smart memecah teks input menjadi token. Filter lowercase kemudian mengonversi semua token menjadi huruf kecil. Terakhir, filter my_synonym_filter menerapkan aturan sinonim, memperlakukan token seperti begin dan start sebagai setara.

Langkah 2: Konfigurasikan bidang title

  • Untuk versi Elasticsearch sebelum 7.0

    PUT /my_index/_mapping/doc
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "my_synonyms"
     }
    }
    }
  • Untuk Elasticsearch 7.0 dan versi setelahnya

    PUT /my_index/_mapping/
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "my_synonyms"
     }
    }
    }

Langkah 3: Verifikasi konfigurasi

GET /my_index/_analyze
{
 "analyzer":"my_synonyms",
 "text":"Shall I begin?"
}

Respons:

{
  "tokens" : [
    {
      "token" : "shall",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "i",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "ENGLISH",
      "position" : 1
    },
    {
      "token" : "begin",
      "start_offset" : 8,
      "end_offset" : 13,
      "type" : "ENGLISH",
      "position" : 2
    },
    {
      "token" : "start",
      "start_offset" : 8,
      "end_offset" : 13,
      "type" : "SYNONYM",
      "position" : 2
    }
  ]
}

Dampak operasi sinonim

Operasi sinonim yang berbeda memiliki dampak berbeda terhadap kluster. Memahami perbedaan ini dapat membantu Anda memilih metode pembaruan yang tepat sesuai kebutuhan bisnis.

Operasi

Memicu restart kluster

Deskripsi

Pembaruan inkremental (mengunggah file dengan nama yang sama)

Tidak

Mengunggah file sinonim dengan nama yang sama seperti yang sudah ada merupakan pembaruan inkremental (hot update) dan tidak memicu restart kluster.

Memperbarui kamus sinonim dari Update Synonym Dictionary (nama file baru atau penghapusan file)

Ya

Mengunggah file sinonim dengan nama baru atau menghapus file yang ada lalu menyimpan perubahan akan memicu restart bergulir kluster.

Pembaruan inkremental (hot update)

Saat Anda mengunggah file sinonim dengan nama yang sama seperti yang sudah ada, sistem melakukan pembaruan inkremental (hot update), yang tidak memicu restart kluster. File baru menimpa file aslinya, dan indeks baru yang Anda buat secara otomatis menggunakan kamus yang diperbarui.

Catatan

Setelah pembaruan inkremental, indeks yang sudah ada tidak secara otomatis memuat kamus baru. Untuk menerapkan perubahan ke indeks yang sudah ada, Anda harus menutup lalu membuka kembali indeks tersebut (Close/Open API), atau membangun ulang indeks.

Pembaruan Konsol yang memicu restart kluster

Operasi berikut memicu restart bergulir kluster:

  • Mengunggah file sinonim dengan nama baru dan menyimpan perubahan.

  • Menghapus file sinonim yang ada dan menyimpan perubahan.

Jika bisnis Anda memerlukan penghindaran restart kluster, kami merekomendasikan menggunakan plugin elasticsearch-analysis-dynamic-synonym untuk menerapkan pembaruan dinamis.

Restart bergulir dapat menimbulkan efek berikut:

  • jitter layanan: Selama restart bergulir di mana node direstart secara berurutan, Anda mungkin mengalami peningkatan sementara pada latensi kueri, bahkan jika Anda memiliki shard replika.

  • Risiko gangguan layanan: Dalam kondisi ekstrem, seperti beban kluster tinggi atau indeks tanpa shard replika, restart dapat menyebabkan beberapa permintaan gagal atau gangguan layanan singkat.

  • Durasi restart: Waktu total yang diperlukan untuk restart dan distribusi kamus bergantung pada ukuran kluster, volume data, dan beban. Proses ini dapat memakan waktu beberapa menit atau lebih lama.

Ketersediaan baca dan tulis selama perubahan

Setelah Anda mengirimkan konfigurasi sinonim, status instans berubah menjadi taking effect. Selama periode ini:

  • Operasi baca dan tulis untuk instans tidak terpengaruh dan tetap tersedia.

  • Fitur ekspansi sinonim sementara tidak tersedia, dan kueri pencarian yang bergantung pada aturan sinonim baru mungkin mengembalikan hasil yang tidak lengkap.

  • Setelah perubahan berlaku, status instans kembali ke Active, dan indeks baru yang dibuat secara otomatis menggunakan kamus sinonim yang diperbarui.

FAQ

Pemecahan masalah status Yellow atau perubahan macet

Jika status kluster berubah menjadi Yellow atau perubahan berikutnya diblokir setelah Anda mengonfigurasi atau memperbarui sinonim, periksa penyebab umum berikut:

  • File sinonim tidak diformat dengan benar: File berisi huruf kapital, yang menyebabkan alat analisis gagal saat Penguraian.

  • error OpenStorePlugin: Konten abnormal dalam file sinonim memicu error OpenStorePlugin. Hal ini mencegah alokasi shard secara benar, menyebabkan status kluster menjadi abnormal, dan memblokir perubahan berikutnya.

Untuk memecahkan dan mengatasi masalah ini, lakukan langkah-langkah berikut:

  1. Periksa dan perbaiki file sinonim: Pastikan semua kata dalam file ditulis dalam huruf kecil. Setelah melakukan perbaikan, unggah kembali file tersebut.

  2. Tambahkan filter lowercase: Dalam konfigurasi filter alat analisis di pengaturan indeks, tambahkan filter lowercase untuk memastikan token secara otomatis dikonversi ke huruf kecil selama analisis. Contoh konfigurasi:

    "filter": {
      "my_synonym_filter": {
        "type": "synonym",
        "synonyms_path": "analysis/your-dict-name.txt"
      }
    },
    "analyzer": {
      "my_synonyms": {
        "filter": ["lowercase", "my_synonym_filter"],
        "tokenizer": "ik_smart"
      }
    }
  3. Pulihkan indeks yang tidak beroperasi: Jika memodifikasi filter alat analisis mengharuskan Anda menutup atau membangun ulang indeks di lingkungan produksi, atau jika modifikasi alat analisis tidak memungkinkan di lingkungan produksi, coba pulihkan status kluster dengan memaksa realokasi shard:

    POST /_cluster/reroute?retry_failed=true

Risiko plugin analysis-dynamic-synonym

Plugin open-source analysis-dynamic-synonym memungkinkan Anda memuat sinonim secara dinamis dari file remote atau lokal, yang menerapkan aturan sinonim baru tanpa merestart kluster. Namun, plugin ini memiliki risiko berikut:

  • Cacat konkurensi: Dalam skenario baca-tulis konkurensi tinggi, plugin ini dapat menyebabkan deadlock pada proses Elasticsearch, mengakibatkan Penggunaan CPU 100% dan layanan tidak tersedia.

  • Batasan kasus penggunaan: Gunakan plugin ini dengan hati-hati pada instans Serverless atau di lingkungan produksi dengan persyaratan stabilitas ketat. Sebelum mengaktifkannya, kami merekomendasikan mengevaluasi sepenuhnya stabilitasnya di bawah beban kueri dan tulis aktual Anda di Lingkungan pengujian. Jika sinonim tidak sering diperbarui, kami merekomendasikan menggunakan metode pembaruan inkremental (mengunggah file dengan nama yang sama) untuk menghindari risiko potensial dari plugin pihak ketiga.