全部产品
Search
文档中心

Elasticsearch:Migrasi Data Menggunakan Reindex API

更新时间:Feb 28, 2026

Reindex API menyalin seluruh data atau data yang memenuhi kondisi tertentu dari satu indeks ke indeks lainnya, baik dalam kluster yang sama maupun lintas kluster. Topik ini menjelaskan cara melakukan migrasi data dari satu kluster ke kluster lain menggunakan Reindex API.

Batasan

  • Kedua kluster harus berada dalam wilayah dan zona yang sama.

  • Mode Pengendalian Penyebaran: Mendukung migrasi data antar kluster dengan mode kontrol v2 ke v3, antar kluster v2, serta antar kluster v3.

    Kluster memiliki dua mode penyebaran pengendalian: cloud-native new control (v3) dan basic control (v2).

    image

  • Versi Kluster: Mendukung migrasi data antar versi utama yang sama (misalnya, dari versi 8.15.1 ke 8.15.1). Jangan lakukan migrasi lintas versi utama, seperti dari 7.7.1 ke 8.15.1.

Persiapan

Dalam contoh ini, kedua kluster ES_1 dan ES_2 menggunakan versi vector-enhanced 8.15.1. Tujuannya adalah melakukan migrasi data dari ES_2 ke ES_1 menggunakan Reindex API. Sebelum migrasi, Anda harus menyelesaikan persiapan berikut.

Siapkan Data Uji

  • Buat indeks dan masukkan data uji di ES_2:

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

    Contoh ini membuat indeks bernama product_info, yang mencakup bidang productName, annual_rate, dan describe. Respons sukses akan dikembalikan setelah pembuatan berhasil.

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

    Masukkan 6 entri data uji:

    POST /product_info/_bulk
    {"index":{}}
    {"productName":"Wealth Management Product A","annual_rate":"3.2200%","describe":"180-day fixed wealth management, minimum investment of 20,000, stable returns, self-service message push selection available"}
    {"index":{}}
    {"productName":"Wealth Management Product B","annual_rate":"3.1100%","describe":"90-day fixed investment product, minimum investment of 10,000, daily income message push"}
    {"index":{}}
    {"productName":"Wealth Management Product C","annual_rate":"3.3500%","describe":"270-day fixed investment product, minimum investment of 40,000, daily income immediately pushed"}
    {"index":{}}
    {"productName":"Wealth Management Product D","annual_rate":"3.1200%","describe":"90-day fixed investment product, minimum investment of 12,000, daily income message push"}
    {"index":{}}
    {"productName":"Wealth Management Product E","annual_rate":"3.0100%","describe":"30-day fixed investment product recommendation, minimum investment of 8,000, daily income message push"}
    {"index":{}}
    {"productName":"Wealth Management Product F","annual_rate":"2.7500%","describe":"Popular short-term product, 3-day short term, no service fees, minimum investment of 500, receive income messages via text message"}
  • Buat indeks di ES_1 untuk menyimpan data yang dimigrasikan dari ES_2:

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

Buat Koneksi Jaringan Pribadi Antarkluster Menggunakan NLB dan PrivateLink

Untuk meningkatkan keamanan kluster, kluster dalam VPC yang sama atau lintas VPC yang berbeda diisolasi secara jaringan. Anda dapat membuat koneksi jaringan pribadi antarkluster menggunakan NLB dan PrivateLink.

Seperti ditunjukkan pada gambar berikut, dua kluster ES ditempatkan dalam VPC yang sama. Buat layanan titik akhir menggunakan VPC pengguna, lalu konfigurasikan koneksi jaringan pribadi antarkluster di ES_1 untuk mendapatkan titik akhir. Terakhir, asosiasikan titik akhir tersebut dengan layanan titik akhir guna membangun koneksi jaringan pribadi antara kedua kluster.

Layanan Titik Akhir: Layanan titik akhir memungkinkan VPC lain membangun koneksi PrivateLink dengan membuat titik akhir. Buat sumber daya layanan terkait secara manual.
Titik Akhir: Titik akhir diasosiasikan dengan layanan titik akhir dan membangun konektivitas jaringan untuk akses jaringan pribadi ke layanan eksternal melalui VPC. Alibaba Cloud ES secara otomatis membuat titik akhir di lingkungan jaringan ES saat Anda mengonfigurasi PrivateLink instans.
image

Untuk langkah-langkah konfigurasi, lihat Peering Jaringan Pribadi Antarkluster Alibaba Cloud ES Menggunakan NLB dan PrivateLink. Anda harus menyelesaikan langkah 1, 2, dan 3.

Tampilan antarmuka setelah konfigurasi berhasil:

image

Konfigurasikan Daftar Putih Reindex API

Untuk memastikan keamanan migrasi data lintas kluster, tambahkan alamat koneksi jaringan pribadi dan nomor port komunikasi kluster ES_2 ke daftar putih Reindex API kluster ES_1.

  1. Buka halaman Security di ES_1. Lalu, klik Configure Private Connection, kemudian klik Edit. Di sidebar Configure Private Connection, klik Endpoint ID yang dituju.

    image

  2. Di tab Endpoint Connections di Konsol VPC, klik ikon 展开符 di sebelah Endpoint ID untuk melihat nama domain yang sesuai.

    Penting

    Anda harus menghapus informasi zona dari nama domain sebelum mengonfigurasi daftar putih Reindex API.

    Misalnya, jika nama domain lengkapnya adalah “ep-bp1****************-cn-hangzhou-i.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com”, hapus informasi zona “-cn-hangzhou-i” sehingga diperoleh nama domain akhir “ep-bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com”.

    image

  3. Konfigurasikan daftar putih Reindex API di file YML ES_1. Daftar putih harus mencakup nama domain titik akhir dan port komunikasi.

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

    image

Panggil Reindex API untuk Migrasi Data

  1. Di ES_1, login ke Konsol Kibana.

  2. Di Dev Tools>Console, panggil Reindex API untuk melakukan migrasi 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": "wealth management product"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }

    Kategori

    Parameter

    Deskripsi

    source

    remote

    Menunjukkan kluster remote. Dalam contoh ini, yaitu ES_2.

    host

    Titik akhir kluster ES_2, yang mencakup:

    • Protokol akses: Di halaman Basic Information kluster, lihat protokol akses yang sedang digunakan.

      Penting

      Untuk memastikan keamanan, gunakan protokol HTTPS guna menghindari transmisi password dalam teks biasa saat menghubungkan ke kluster. Untuk informasi lebih lanjut, lihat dokumentasi protokol HTTPS untuk mengaktifkan protokol HTTPS.

    • Nama domain: Alamat koneksi pribadi kluster ES_2, yang harus sesuai dengan nama domain yang dikonfigurasi di daftar putih Reindex.

    • Port komunikasi: Tetap pada 9200.

    username

    Username default kluster adalah elastic.

    password

    Password untuk username tersebut.

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

    index

    Indeks sumber di kluster remote.

    query

    Tentukan data yang akan dimigrasikan menggunakan sintaksis query.

    Dalam contoh ini, data yang memiliki 'wealth management product' di bidang `productName` pada indeks kluster ES_2 dimigrasikan ke kluster ES_1.

    dest

    index

    Indeks di kluster tujuan yang digunakan untuk menyimpan data hasil migrasi.

    Hasil yang diharapkan setelah eksekusi berhasil:

    {
      "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": "wealth management product D",
              "annual_rate": "3.1200%",
              "describe": "90-day fixed investment product, minimum investment of 12,000, daily income message push"
            }
          },
          {
            "_index": "dest",
            "_id": "nNkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "wealth management product A",
              "annual_rate": "3.2200%",
              "describe": "180-day regular wealth management, minimum investment of 20,000, stable returns, can self-select message push"
            }
          },
          {
            "_index": "dest",
            "_id": "ndkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "wealth management product B",
              "annual_rate": "3.1100%",
              "describe": "90-day fixed investment product, minimum investment of 10,000, daily income message push"
            }
          },
          {
            "_index": "dest",
            "_id": "ntkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "wealth management product C",
              "annual_rate": "3.3500%",
              "describe": "270-day fixed investment product, minimum investment of 40,000, daily income message push"
            }
          },
          {
            "_index": "dest",
            "_id": "oNkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "wealth management product E",
              "annual_rate": "3.0100%",
              "describe": "30-day fixed investment product recommendation, minimum investment of 8,000, daily income message push"
            }
          },
          {
            "_index": "dest",
            "_id": "odkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "wealth management product F",
              "annual_rate": "2.7500%",
              "describe": "Popular short-term product, 3-day term, no service fees, minimum investment of 500, receive income messages via text message"
            }
          }
        ]
      }
    }

FAQ

Q: Bagaimana cara menyesuaikan batas baca batch dan timeout saat memanggil Reindex API, berdasarkan ukuran dokumen yang akan dimigrasikan?

  • Menyesuaikan batas baca batch

    Ukuran maksimum default untuk baca batch adalah 100 MB. Jika indeks Anda berisi dokumen besar, turunkan nilai ini sesuai kebutuhan.

    Dalam contoh berikut, parameter size mengatur nilai batch menjadi 10 MB.

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

    socket_timeout mengatur timeout baca socket dengan nilai default 30 detik. connect_timeout mengatur timeout koneksi kluster dengan nilai default 1 detik.

    Dalam contoh berikut, timeout baca socket diatur menjadi 1 menit, dan timeout koneksi diatur menjadi 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"
      }
    }