All Products
Search
Document Center

Elasticsearch:Migrasi data menggunakan Reindex API

Last Updated:Jun 22, 2026

Reindex API menyalin dokumen dari indeks sumber ke indeks tujuan. Anda dapat menyalin semua dokumen atau hanya yang sesuai dengan kueri tertentu. Proses ini dapat dilakukan dalam satu kluster atau antar kluster berbeda. Topik ini menjelaskan cara menggunakan Reindex API untuk memigrasi data dari satu kluster ke kluster lain.

Batasan

  • Kedua kluster harus berada di wilayah dan zona ketersediaan yang sama.

  • Mode management dan penyebaran: Anda dapat memigrasi data dari kluster v2 ke kluster v3, antara dua kluster v2, atau antara dua kluster v3.

    Kluster memiliki dua mode management dan penyebaran: Cloud-native New Management (v3) dan Basic Management (v2). Anda dapat melihat mode management dan penyebaran kluster Anda di halaman informasinya di Konsol.

  • Versi kluster: Migrasi data didukung antara kluster dengan versi utama yang sama, misalnya dari versi minor yang lebih rendah ke versi minor yang lebih tinggi. Migrasi data antar versi utama, seperti dari 7.7.1 ke 8.15.1, tidak disarankan.

Prasyarat

Dalam contoh ini, kami akan memigrasi data dari ES_2 ke ES_1 menggunakan Reindex API. Sebelum memulai, lengkapi persiapan berikut.

Siapkan data uji

  • Di ES_2, buat indeks dan masukkan data uji:

    PUT /product_info
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      },
      "mappings": {
          "properties": {
            "productName": {
              "type": "text",
              "analyzer": "ik_smart"
            },
            "annual_rate":{
              "type":"keyword"
            },
            "describe": {
              "type": "text",
              "analyzer": "ik_smart"
            }
        }
      }
    }

    Perintah ini membuat indeks bernama product_info yang berisi bidang productName, annual_rate, dan describe. Jika berhasil, permintaan mengembalikan hasil berikut.

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "product_info"
    }

    Masukkan enam dokumen uji:

    POST /product_info/_bulk
    {"index":{}}
    {"productName":"Financial Product A","annual_rate":"3.2200%","describe":"A 180-day fixed-term product with a minimum investment of 20,000. Stable returns with optional message notifications."}
    {"index":{}}
    {"productName":"Financial Product B","annual_rate":"3.1100%","describe":"A 90-day regular investment product with a minimum investment of 10,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product C","annual_rate":"3.3500%","describe":"A 270-day regular investment product with a minimum investment of 40,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product D","annual_rate":"3.1200%","describe":"A 90-day regular investment product with a minimum investment of 12,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product E","annual_rate":"3.0100%","describe":"A recommended 30-day regular investment product with a minimum investment of 8,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product F","annual_rate":"2.7500%","describe":"A popular 3-day short-term product with no fees and a minimum investment of 500. Profit notifications are sent via SMS."}
  • Di ES_1, buat indeks untuk menyimpan data yang dimigrasi dari ES_2:

    PUT dest
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      }
    }

Koneksi privat melalui NLB dan PrivateLink

Untuk meningkatkan keamanan kluster, kluster dalam VPC yang sama atau VPC berbeda terisolasi secara jaringan. Anda harus menggunakan NLB dan PrivateLink untuk membuat koneksi privat (koneksi VPC) antar kluster.

Seperti ditunjukkan pada gambar berikut, kedua kluster ES ditempatkan di VPC yang sama. Layanan titik akhir dibuat di VPC pengguna. Kemudian, koneksi privat dikonfigurasi di ES_1 untuk mendapatkan titik akhir. Terakhir, titik akhir tersebut dikaitkan dengan layanan titik akhir guna membuat koneksi privat antara kedua kluster.

Layanan titik akhir adalah layanan yang dapat diakses secara privat oleh VPC lain dengan membuat titik akhir. Anda harus membuat sumber daya layanan terkait secara manual.
Titik akhir dikaitkan dengan layanan titik akhir dan menyediakan koneksi jaringan pribadi untuk mengakses layanan eksternal. Saat Anda mengonfigurasi koneksi privat untuk instans Alibaba Cloud ES, titik akhir secara otomatis dibuat di lingkungan jaringan tempat kluster ES berada.

Untuk langkah-langkah konfigurasi detail, lihat Membuat koneksi privat antar kluster Alibaba Cloud ES menggunakan NLB dan PrivateLink. Anda harus menyelesaikan Langkah 1, Langkah 2, dan Langkah 3.

Di halaman Security configuration pada instans ES_1, pada bagian Cluster network settings, klik Modify di sebelah kanan Configure instance private connection. Di panel Configure instance private connection, Anda dapat melihat ID titik akhir, ID layanan titik akhir, dan status koneksi. Saat status koneksi titik akhir adalah Terhubung, kluster ES_1 dan ES_2 dapat berkomunikasi melalui alamat IP privat mereka.

Konfigurasikan daftar putih Reindex API

Untuk memastikan migrasi data aman antar kluster, Anda harus menambahkan alamat dan port koneksi privat kluster ES_2 ke daftar putih Reindex API kluster ES_1.

  1. Buka halaman Security untuk ES_1 dan klik Edit di sebelah Configure Private Connection. Di panel samping Configure Private Connection, klik Endpoint ID yang dituju.

    Untuk menambahkan koneksi baru, klik + Add Private Connection di bagian bawah panel samping Configure instance private connection.

  2. Di Konsol VPC, pada tab Endpoint Connections, klik ikon 展开符 di sebelah ID titik akhir untuk melihat nama domain-nya.

    Penting

    Anda harus menghapus identifikasi zona ketersediaan dari nama domain sebelum menambahkannya ke daftar putih Reindex API.

    Misalnya, jika nama domain lengkapnya adalah "ep-bp1****************-cn-hangzhou-i.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com", hapus identifikasi zona ketersediaan "-cn-hangzhou-i" sehingga nama domain akhir menjadi: "ep-bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com".

  3. Di file YML untuk ES_1, konfigurasikan daftar putih Reindex API. Entri daftar putih harus berupa nama domain dan port titik akhir.

    reindex:
      remote:
        whitelist: >-
          ep-bp1bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com:9200

    Di halaman Konfigurasi kluster ES, klik Modify configuration di sebelah kanan YML configuration. Di editor YAML Other configure pada panel, tambahkan konfigurasi daftar putih tersebut.

Panggil Reindex API

  1. Login ke Konsol Kibana untuk ES_1.

  2. Di Dev Tools > Console, panggil Reindex API untuk memigrasi data.

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://ep-bp1bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com:9200",
          "username": "elastic",
          "password": "xxx-xxxx123!"
        },
        "index": "product_info",
        "query": {
          "match": {
            "productName": "Financial Product"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }

    Kategori

    Parameter

    Deskripsi

    source

    remote

    Kluster remote. Dalam contoh ini, ES_2.

    host

    Alamat akses kluster ES_2. Termasuk:

    • Protokol. Anda dapat menemukannya di halaman Basic Information kluster.

      Penting

      Untuk keamanan, gunakan protokol HTTPS agar password tidak dikirim dalam teks biasa saat menghubungkan ke kluster. Untuk mengaktifkan protokol HTTPS, lihat protokol HTTPS.

    • Nama domain: Alamat koneksi privat kluster ES_2. Harus sama dengan nama domain yang dikonfigurasi di daftar putih Reindex.

    • Port: Tetap pada 9200.

    username

    Username default untuk kluster adalah elastic.

    password

    Password untuk user yang ditentukan.

    Password ditetapkan saat Anda membuat kluster. Jika lupa, Anda dapat mengatur ulang password.

    index

    Indeks sumber di kluster remote.

    query

    Kueri yang menentukan dokumen mana yang akan dimigrasi.

    Dalam contoh ini, dokumen yang bidang productName-nya mengandung "Financial Product" dimigrasi dari indeks kluster ES_2 ke kluster ES_1.

    dest

    index

    Indeks tujuan di kluster target untuk data yang dimigrasi.

    Jika berhasil, permintaan mengembalikan hasil berikut:

    {
      "took": 211,
      "timed_out": false,
      "total": 6,
      "updated": 6,
      "created": 0,
      "deleted": 0,
      "batches": 1,
      "version_conflicts": 0,
      "noops": 0,
      "retries": {
        "bulk": 0,
        "search": 0
      },
      "throttled_millis": 0,
      "requests_per_second": -1,
      "throttled_until_millis": 0,
      "failures": []
    }
  3. Panggil API _search untuk melihat hasil migrasi.

    GET dest/_search

    Hasil yang diharapkan:

    {
      "took": 6,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": {
          "value": 6,
          "relation": "eq"
        },
        "max_score": 1,
        "hits": [
          {
            "_index": "dest",
            "_id": "n9kyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product D",
              "annual_rate": "3.1200%",
              "describe": "A 90-day regular investment product with a minimum investment of 12,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "nNkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "Financial Product A",
              "annual_rate": "3.2200%",
              "describe": "A 180-day fixed-term product with a minimum investment of 20,000. Stable returns with optional message notifications."
            }
          },
          {
            "_index": "dest",
            "_id": "ndkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "Financial Product B",
              "annual_rate": "3.1100%",
              "describe": "A 90-day regular investment product with a minimum investment of 10,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "ntkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product C",
              "annual_rate": "3.3500%",
              "describe": "A 270-day regular investment product with a minimum investment of 40,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "oNkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product E",
              "annual_rate": "3.0100%",
              "describe": "A recommended 30-day regular investment product with a minimum investment of 8,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "odkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product F",
              "annual_rate": "2.7500%",
              "describe": "A popular 3-day short-term product with no fees and a minimum investment of 500. Profit notifications are sent via SMS."
            }
          }
        ]
      }
    }

FAQ

T: Bagaimana cara menyesuaikan ukuran batch dan timeout untuk Reindex API berdasarkan ukuran dokumen?

  • Menyesuaikan ukuran batch

    Ukuran batch default untuk operasi reindex adalah 1.000 dokumen. Jika indeks Anda berisi dokumen besar, Anda dapat mengurangi nilai ini untuk mencegah timeout.

    Dalam contoh berikut, size diatur ke 10 untuk memproses 10 dokumen per batch.

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200"
        },
        "index": "source",
        "size": 10,
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }
  • Menyesuaikan timeout

    Parameter socket_timeout, yang default-nya 30 detik, mengatur timeout pembacaan socket. Parameter connect_timeout, yang default-nya 1 detik, mengatur timeout koneksi kluster.

    Dalam contoh berikut, timeout pembacaan socket diatur ke 1 menit, dan timeout koneksi diatur ke 10 detik.

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200",
          "socket_timeout": "1m",
          "connect_timeout": "10s"
        },
        "index": "source",
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }