All Products
Search
Document Center

:Panduan penggunaan

Last Updated:Aug 08, 2026

Panduan ini menjelaskan cara membuat dan menghubungkan ke instans Alibaba Cloud Elasticsearch AI Engine Edition, serta menggunakan API Collection, Slice, pencarian vektor, dan manajemen data.

Alur kerja

Tabel berikut mencantumkan alur lengkap mulai dari aktivasi hingga operasional beserta bagian yang sesuai untuk setiap fase.

Fase

Operasi

Bagian

1 Persiapan

Buat instans AI Engine Edition, konfigurasikan jaringan, akun, node indeks, dan node pencarian. Hubungkan ke instans dan verifikasi izin akun serta konektivitas jaringan.

Siapkan instans

2 Pemilihan mode

Pilih antara mode namespace dan mode recall klaster vektor. Mode tidak dapat diubah setelah pembuatan.

Pilih mode Collection

3 Memulai

Buat Collection dalam mode yang dipilih, rencanakan Slice, dan selesaikan operasi tulis dan kueri.

Mulai cepat

4 Manajemen

Sesuaikan parameter kapasitas Collection dan pemetaan. Daftarkan, tampilkan daftar, dan hapus Slice.

Kelola Collection dan Slice

5 Integrasi

Integrasikan dengan aplikasi Anda: tulis data secara batch, kendalikan visibilitas Refresh, tentukan cakupan kueri, dan Reindex sesuai kebutuhan.

Tulis, baca, dan kueri data

6 Peningkatan

Gunakan cache warming, pengindeksan vektor DiskBBQ, Alias Collection, dan Copy Slice sesuai kebutuhan.

Fitur lanjutan

7 Operasional

Monitor status kluster melalui pemantauan kluster dan API CAT, konfigurasikan izin role, dan bersihkan Collection yang tidak digunakan.

Operasional dan izin

Referensi

Tinjau perbedaan dari Elasticsearch tradisional, batasan penggunaan, dan daftar API.

Referensi

Contoh dalam panduan ini menggunakan sintaks Konsol yang didukung oleh Kibana Dev Tools. Saat menggunakan klien HTTP lain, konfigurasikan alamat instans, autentikasi, dan parameter TLS yang diperlukan.

Panduan ini berlaku untuk AI Engine Edition 9.99.0. Jalur permintaan, parameter, dan batasan penggunaan dalam panduan ini didasarkan pada versi ini. Versi lain mungkin berbeda. Gunakan dokumentasi yang sesuai dengan versi yang ditampilkan pada instans di Konsol.

Contoh menetapkan index.number_of_replicas ke 2 untuk memenuhi persyaratan dasar ketersediaan tinggi kueri. Jumlah shard utama, dimensi vektor, dan parameter kapasitas lainnya hanya untuk tujuan ilustrasi API. Konfigurasi produksi harus didasarkan pada evaluasi kapasitas dan hasil uji stres.

Panduan ini hanya mencakup API yang umum digunakan untuk pengembangan aplikasi dan manajemen harian, bukan semua API. Untuk posisi produk, arsitektur inti, keunggulan produk, skenario umum, dan referensi kinerja, lihat Ikhtisar fitur.

Siapkan instans

Prasyarat

  • Anda telah mengaktifkan layanan Alibaba Cloud Elasticsearch dan telah membuat atau berencana membuat instans AI Engine Edition.

  • Anda telah merencanakan VPC, vSwitch, daftar putih alamat IP, dan jaringan klien untuk instans tersebut.

  • Anda telah merancang pemetaan berdasarkan data bisnis Anda. Untuk skenario pencarian vektor, Anda juga perlu menentukan model vektor, dimensi, metrik kemiripan, dan metode pembaruan.

  • Akun Anda memiliki izin yang diperlukan. Manajemen Collection biasanya memerlukan manage, membaca data memerlukan read, dan menulis data memerlukan write. Untuk informasi lebih lanjut, lihat Izin Collection.

Buat instans

Item pembelian dan tata letak halaman dapat berubah berdasarkan wilayah, versi, dan fase produk. Langkah-langkah berikut didasarkan pada halaman Konsol aktual. Wilayah dan zona yang didukung oleh AI Engine Edition didasarkan pada item yang dapat dibeli di halaman pembelian.

  1. Login ke Konsol Alibaba Cloud Elasticsearch dan buka halaman pembuatan instans.

  2. Pilih AI Engine Edition dan pilih wilayah serta zona yang disediakan oleh Konsol. Versi Elasticsearch untuk tipe instans ini bersifat tetap. Halaman pembuatan menampilkan versi 9.x, yang tidak dapat diubah. Setelah instans dibuat, Anda dapat melihat nomor versi spesifik di halaman daftar instans atau detail instans.

  3. Konfigurasikan node indeks berdasarkan beban kerja tulis dan konfigurasikan node pencarian berdasarkan beban kerja kueri. Komponen opsional lainnya didasarkan pada Konsol.

  4. Konfigurasikan VPC, vSwitch, username, dan password. Daftar putih alamat IP tidak dikonfigurasi di halaman pembuatan. Anda mengonfigurasinya di halaman konfigurasi keamanan instans setelah instans dibuat.

  5. Konfirmasi konfigurasi dan biaya, lalu buat instans. Setelah status instans berubah menjadi Available, catat alamat akses Elasticsearch dan Kibana.

    Spesifikasi node, jumlah minimum node, dan konfigurasi node master khusus didasarkan pada item yang dapat dibeli saat ini di halaman pembelian.

Jumlah dan spesifikasi node harus ditentukan berdasarkan throughput tulis, konkurensi kueri, konstruksi indeks vektor, set data aktif, dan kebutuhan cache. Operasi spesifik untuk menyesuaikan node dan aturan penagihan didasarkan pada Konsol.

Hubungkan ke instans

Anda dapat menggunakan Kibana Dev Tools, klien yang kompatibel dengan Elasticsearch, atau klien HTTP apa pun untuk mengakses instans. Alamat instans, daftar putih jaringan, sertifikat, dan metode autentikasi didasarkan pada halaman detail instans.

Nama domain akses AI Engine Edition bervariasi berdasarkan jenis jaringan. Nama domain hanya menentukan role node mana yang awalnya menerima permintaan dan tidak membatasi jenis permintaan. Kluster meneruskan permintaan ke role node yang benar-benar menanganinya.

Jenis jaringan

Nama domain

Node masuk

Penanganan permintaan

Private network

Nama domain private network Elasticsearch default yang ditampilkan di Konsol

Search node

Mendukung baca dan tulis. Permintaan tulis diteruskan ke node indeks untuk diproses.

Private network

{instanceId}-index.elasticsearch.aliyuncs.com

Index node

Mendukung baca dan tulis. Permintaan kueri diteruskan ke node pencarian untuk diproses. Ganti {instanceId} dengan ID instans.

Public network

Nama domain public network Elasticsearch default yang ditampilkan di Konsol

Search node

Hanya nama domain ini yang disediakan untuk akses public network. Mendukung baca dan tulis. Permintaan tulis diteruskan ke node indeks untuk diproses.

Saat mengakses instans melalui private network, kedua nama domain mendukung operasi baca dan tulis. Untuk akses produksi, gunakan nama domain private network default untuk permintaan kueri dan nama domain private network node indeks untuk permintaan tulis guna mengurangi konsumsi bandwidth jaringan pada node pencarian. Ini sangat penting untuk tulis Bulk, kueri yang mengembalikan hasil besar, atau skenario konkurensi tinggi. Saat mengakses instans melalui public network, gunakan nama domain public network default untuk permintaan baca dan tulis.

Sebagai contoh, jika ID instans adalah es-cn-xxx, nama domain private network node indeks adalah es-cn-xxx-index.elasticsearch.aliyuncs.com. Protokol, port, dan metode akses jaringan didasarkan pada informasi yang ditampilkan di Konsol.

Instans menggunakan HTTP secara default. Jika Anda mengaktifkan HTTPS di Konsol, ubah protokol koneksi klien ke HTTPS.

Jalankan permintaan berikut di Kibana Dev Tools untuk memverifikasi koneksi:

GET /

AI Engine Edition 9.99.0 sesuai dengan versi kernel Elasticsearch 9.5.0. Oleh karena itu, version.number yang dikembalikan oleh permintaan ini adalah nomor versi kernel, yang berbeda dari 9.99.0 yang ditampilkan di Konsol. Versi Elasticsearch aktual didasarkan pada respons API kluster. Saat menginstal plugin kustom, gunakan nomor versi 9.99.0 yang sesuai dengan AI Engine Edition.

Saat menggunakan cURL, ganti alamat instans dan kredensial. Untuk penggunaan produksi, jangan menyimpan password dalam teks biasa di skrip atau riwayat perintah:

curl --user '{username}:{password}' 'http://{elasticsearch-endpoint}/'

Saat menggunakan klien resmi, pilih versi klien berdasarkan dokumentasi kompatibilitas API untuk versi instans Anda, dan gunakan kembali kolam koneksi klien. Jangan membuat klien baru untuk setiap permintaan.

Konvensi umum

Konvensi berikut berlaku untuk semua API Collection, Slice, dan dokumen dalam panduan ini. Bagian selanjutnya merujuknya tanpa mengulangi detailnya.

Konvensi akses

  • Aplikasi selalu mengakses data melalui nama Collection atau Alias Collection.

  • Dalam mode namespace, tulis dan kueri menentukan namespace melalui _slice. Kueri yang tidak menyediakan _slice gagal. Untuk mengkueri semua Slice, gunakan secara eksplisit _slice=_all. Beberapa API dokumen dan kueri juga mendukung routing sebagai alternatif. Untuk informasi lebih lanjut tentang cakupan yang didukung, lihat Parameter kompatibilitas routing.

  • Dalam mode recall klaster vektor, tulis menentukan klaster vektor melalui _slice atau routing_field. Kueri KNN dapat secara otomatis memilih beberapa Slice kandidat berdasarkan vektor kueri. Kueri yang tidak dapat secara otomatis memilih Slice kandidat tetap memerlukan _slice eksplisit, atau routing dalam API yang kompatibel.

  • Slice digunakan untuk mengatur data dan membatasi cakupan kueri. Slice bukan batas izin akun. Untuk mengisolasi izin penyewa, kombinasikan autentikasi tingkat aplikasi dengan mekanisme keamanan yang didukung produk.

  • Jangan menyimpan atau mengakses langsung indeks pendukung (Backing Index) .sc-*. Nama dan siklus hidupnya dikelola oleh sistem. Beberapa respons API (seperti _index dalam respons tulis dan backing_index dalam respons pendaftaran Slice) mengembalikan nama-nama ini hanya untuk pengamatan dan troubleshooting. Nama-nama tersebut tidak boleh digunakan sebagai target untuk permintaan aplikasi selanjutnya. Saat mengonfigurasi izin role, gunakan pola wildcard .sc-<collection>-*. Untuk informasi lebih lanjut, lihat Izin Collection.

Parameter kompatibilitas routing

Saat menggunakan API baca/tulis dokumen dan kueri yang tercantum dalam panduan ini pada Collection atau Alias Collection, Anda dapat menggunakan parameter standar Elasticsearch routing sebagai pengganti _slice. Ini untuk kompatibilitas dengan klien yang ada. Untuk aplikasi baru, gunakan _slice yang lebih eksplisit secara semantik. URL yang sama atau item Bulk atau MGet yang sama tidak dapat menentukan kedua parameter secara bersamaan.

Kompatibilitas ini tidak berlaku untuk manajemen Collection dan Slice, cache warming, Copy Slice, CAT, Refresh eksplisit, atau Reindex. Reindex harus menggunakan source._slice dan dest._slice. routing_field adalah konfigurasi untuk menurunkan Slice dari bidang dokumen, bukan alias untuk routing.

Konvensi API umum

  • Permintaan JSON menggunakan Content-Type: application/json. Bulk dan Multi Search menggunakan Content-Type: application/x-ndjson dan memerlukan baris baru di akhir badan permintaan.

  • API Bulk, Multi Search, dan manajemen batch dapat mengalami kegagalan tingkat item. Aplikasi tidak hanya harus memeriksa kode status HTTP. API pendaftaran Slice tunggal dan batch juga menggunakan error tingkat item: permintaan keseluruhan mengembalikan HTTP 200, tetapi field errors tingkat atas mungkin true. Periksa setiap items[].result secara individual.

  • HTTP 429 menunjukkan bahwa server saat ini menolak permintaan. Klien harus menggunakan backoff eksponensial dengan batas atas dan hanya mencoba ulang operasi yang cocok untuk dicoba ulang.

  • Timeout koneksi atau HTTP 5xx tidak berarti tulis pasti tidak terjadi. Verifikasi dengan ID dokumen stabil atau mekanisme idempoten lainnya sebelum mencoba ulang.

  • Saat meneruskan sejumlah besar nilai _slice melalui URL, perhatikan bahwa panjang maksimum baris permintaan HTTP adalah 4096 byte. Saat nama Slice panjang, too_long_http_line_exception mungkin dipicu sebelum mencapai batas jumlah Slice.

    API manajemen Collection umumnya menggunakan parameter kueri berikut. Cakupan yang didukung spesifik didasarkan pada deskripsi setiap API.

Parameter

Nilai default umum

Deskripsi

master_timeout

30s

Waktu maksimum untuk menunggu node master memproses permintaan.

timeout

30s

Waktu maksimum untuk menunggu konfirmasi atau hasil saat ini.

Permintaan manajemen yang mengembalikan acknowledged=false atau timeout tidak berarti operasi sisi server telah dikembalikan. Periksa status resource saat ini sebelum mencoba ulang.

Pilih mode Collection

Perbandingan mode

Collection menyediakan mode namespace dan mode recall klaster vektor. Anda harus memilih salah satu dari dua mode tersebut. Mode ditentukan oleh parameter pembuatan slice_strategy dan tidak dapat diubah setelah pembuatan. Mode ini memengaruhi makna bisnis Slice, metode pendaftaran, serta routing tulis dan kueri.

Item

Namespace Mode

Mode recall klaster vektor

slice_strategy

exact

vector_cluster

Arti Irisan

Namespace yang diidentifikasi oleh pengenal bisnis, seperti basis pengetahuan, repositori kode, Agent, atau penyewa.

Klaster vektor yang diperoleh dari pengelompokan offline.

Prasyarat

Aplikasi mengetahui namespace yang akan diakses sebelum mengirim permintaan.

Aplikasi dapat menghasilkan dan terus-menerus memelihara klaster vektor serta vektor centroid-nya secara offline.

Tulis routing

Tentukan namespace melalui _slice. Secara default, Slice dapat didaftarkan secara otomatis pada tulis pertama.

Tentukan klaster vektor melalui _slice atau routing_field. Biasanya, daftarkan Slice dan vektor centroid-nya terlebih dahulu.

Routing kueri

Tentukan secara eksplisit satu, beberapa, atau semua namespace melalui _slice.

Kueri KNN dapat secara otomatis memilih dan mengkueri beberapa Slice kandidat berdasarkan vektor kueri. Anda juga dapat menentukan _slice secara eksplisit.

Nilai default auto_create_slice

true

false

Skenario yang berlaku

Cakupan kueri dapat ditentukan berdasarkan pengenal bisnis seperti ID penyewa, ID basis pengetahuan, atau ID repositori kode sebelum kueri. Misalnya, RAG multi-penyewa hanya perlu mencari basis pengetahuan penyewa saat ini.

Hanya vektor kueri yang tersedia saat kueri, dan cakupan data target tidak dapat ditentukan sebelumnya. Data telah dikelompokkan secara offline, dan klaster vektor yang paling relevan perlu di-recall secara otomatis dari database vektor berskala besar. Misalnya, kueri produk serupa dalam katalog produk lengkap.

Skenario yang tidak berlaku

Cakupan kueri tidak dapat ditentukan sebelumnya, dan sistem perlu secara otomatis menemukan klaster vektor relevan berdasarkan vektor kueri.

Centroid klaster yang andal tidak dapat disediakan, skala data kecil, atau setiap kueri harus mencakup semua data vektor.

Mode recall klaster vektor secara otomatis memilih beberapa Slice kandidat berdasarkan centroid klaster vektor dan mengirim kueri ke Slice-Slice tersebut secara paralel. Ini tidak berarti Anda harus menggunakan mode ini untuk menyimpan vektor. Mode namespace juga mendukung dense_vector, KNN, dan DiskBBQ. Pilih mode recall klaster vektor hanya ketika bisnis Anda perlu secara otomatis meng-recall klaster vektor relevan dan Anda telah menyelesaikan pemeliharaan centroid klaster serta evaluasi tingkat recall.

Panduan pengambilan keputusan

Peringatan

Mode Collection ditentukan saat pembuatan dan tidak dapat diubah nanti. Mengganti mode memerlukan pembuatan Collection baru dan menggunakan Reindex untuk migrasi data.

Gunakan panduan berikut untuk memilih antara kedua mode:

  • Rekomendasi default — Pilih mode namespace (exact) ketika aplikasi dapat menentukan cakupan kueri dari pengenal bisnis (ID penyewa, ID basis pengetahuan, ID repositori kode) sebelum kueri.

  • Pilih mode recall klaster vektor hanya ketika semua kondisi berikut terpenuhi:

    • Bisnis Anda dapat menghasilkan dan terus-menerus memelihara centroid klaster secara offline.

    • Volume data dan jumlah Slice cukup besar sehingga mempersempit cakupan kueri memberikan manfaat nyata.

    • Bisnis Anda memungkinkan pemilihan klaster kandidat sebelum menjalankan kueri KNN, dan Anda telah menentukan jumlah Slice kandidat yang sesuai melalui pengujian tingkat recall.

  • Jangan gunakan mode recall klaster vektor ketika:

    • Data tidak memiliki struktur pengelompokan yang stabil, dan vektor centroid yang andal tidak dapat disediakan.

    • Volume data atau jumlah Slice kecil, dan biaya kueri langsung sudah dapat diterima.

    • Kueri harus mencakup semua data vektor, dan perubahan cakupan recall yang diperkenalkan oleh pemilihan klaster kandidat tidak dapat diterima. Dalam kasus ini, gunakan mode namespace dan tentukan secara eksplisit cakupan kueri _slice.

    Setelah memilih mode namespace, lihat Mode namespace: Pencarian vektor DiskBBQ berdasarkan Slice. Setelah memilih mode recall klaster vektor, lihat Mode recall klaster vektor: Pemilihan Slice kandidat otomatis. Kemampuan manajemen Collection, API data, cache warming, Alias, Copy Slice, dan pemantauan lainnya dalam panduan ini berlaku untuk kedua mode kecuali dinyatakan lain.

Replica kueri dan ketersediaan tinggi

Kueri dalam kedua mode dilayani oleh shard replika pada node pencarian. index.number_of_replicas harus diatur minimal 1. Jika tidak, kueri tidak dapat dilayani. Mengaturnya ke 1 hanya memenuhi persyaratan dasar kueri dan tidak memberikan ketersediaan tinggi kueri. Untuk produksi, atur minimal 2 dan konfigurasikan minimal dua node pencarian sehingga kueri dapat terus dilayani ketika satu node pencarian gagal.

Mulai cepat

Mode namespace: Pencarian vektor DiskBBQ berdasarkan Slice

Platform basis pengetahuan perusahaan menyediakan layanan Generasi yang Diperkaya dengan Pengambilan Data (RAG) untuk beberapa penyewa. Setelah aplikasi menyelesaikan autentikasi penyewa, aplikasi dapat menentukan ID penyewa saat ini. Ketika pengguna mengajukan pertanyaan, aplikasi hanya perlu meng-recall segmen konten yang relevan secara semantik dari basis pengetahuan penyewa tersebut.

Skenario ini dapat menentukan cakupan kueri sebelum mengirim permintaan, sehingga cocok untuk mode namespace. Contoh ini membuat Collection bernama knowledge-chunks dan menggunakan setiap penyewa sebagai Slice. Aplikasi menentukan basis pengetahuan penyewa melalui _slice dan kemudian menggunakan DiskBBQ untuk melakukan KNN dalam Slice yang dipilih. Slice digunakan untuk mengatur data dan membatasi cakupan kueri. Autentikasi penyewa tetap ditangani oleh aplikasi atau mekanisme keamanan Elasticsearch yang didukung.

Langkah 1: Buat Collection mode namespace

PUT /_slice_collection/knowledge-chunks
{
  "settings": {
    "index.number_of_shards": 2,
    "index.number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "tenant_id": { "type": "keyword" },
      "document_id": { "type": "keyword" },
      "title": { "type": "text" },
      "content": { "type": "text" },
      "category": { "type": "keyword" },
      "updated_at": { "type": "date" },
      "embedding": {
        "type": "dense_vector",
        "dims": 4,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "bbq_disk"
        }
      }
    }
  }
}

Hasil berikut dikembalikan. acknowledged bernilai true menunjukkan bahwa metadata Collection telah dibuat.

{
  "acknowledged": true
}

exact adalah strategi default, dan auto_create_slice diaktifkan secara default. Oleh karena itu, saat Anda menulis ke Slice yang belum ada untuk pertama kalinya, sistem secara otomatis mendaftarkan Slice tanpa memerlukan panggilan sebelumnya ke API pendaftaran.

Langkah 2: Tulis data ke Slice berbeda

Tulis segmen konten basis pengetahuan ke tenant-a:

PUT /knowledge-chunks/_doc/chunk-1001?_slice=tenant-a
{
  "tenant_id": "tenant-a",
  "document_id": "doc-refund-policy",
  "title": "Refund and return policy",
  "content": "You can request a refund for duplicate purchases within seven days after the order is completed.",
  "category": "after-sales",
  "updated_at": "2026-07-30T10:00:00Z",
  "embedding": [0.82, 0.10, 0.05, 0.03]
}

Tulis segmen konten basis pengetahuan lain ke tenant-b:

PUT /knowledge-chunks/_doc/chunk-1002?_slice=tenant-b
{
  "tenant_id": "tenant-b",
  "document_id": "doc-shipping-status",
  "title": "Check shipping status",
  "content": "Open the logistics information on the order details page to view the latest delivery status.",
  "category": "shipping",
  "updated_at": "2026-07-30T10:01:00Z",
  "embedding": [0.12, 0.78, 0.06, 0.04]
}

_id dokumen hanya perlu unik dalam Slice yang sama. _id yang sama dapat muncul di Slice berbeda.

Langkah 3: Baca data dan lakukan pencarian vektor dalam Slice

Baca dokumen tertentu di tenant-a:

GET /knowledge-chunks/_doc/chunk-1001?_slice=tenant-a

Bidang dense_vector tidak termasuk dalam _source yang dikembalikan secara default. Untuk mengembalikan nilai vektor, tentukan secara eksplisit _source_includes, misalnya, GET /knowledge-chunks/_doc/chunk-1001?_slice=tenant-a&_source_includes=embedding. Nilai yang dikembalikan dalam presisi float32 dan mungkin sedikit berbeda dari literal desimal yang ditulis.

Kueri vektor bergantung pada data yang telah di-Refresh. Setelah menulis data, tunggu minimal satu siklus Refresh otomatis sebelum menjalankan kueri berikut. Anda dapat memeriksa interval Refresh otomatis saat ini melalui GET /knowledge-chunks/_settings dan melihat nilai index.refresh_interval.

Jalankan kueri KNN DiskBBQ hanya di tenant-a:

POST /knowledge-chunks/_search?_slice=tenant-a
{
  "knn": {
    "field": "embedding",
    "query_vector": [0.80, 0.12, 0.05, 0.03],
    "k": 10,
    "num_candidates": 100
  },
  "_source": ["document_id", "title", "content"]
}

Dalam permintaan ini, aplikasi menentukan Slice melalui _slice=tenant-a. DiskBBQ hanya melakukan pencarian vektor dalam Slice yang dipilih dan tidak secara otomatis memilih Slice lain berdasarkan vektor kueri. Ini adalah perbedaan utama antara mode namespace dan mode recall klaster vektor.

Untuk sintaks dan batasan penggunaan kueri multi-Slice dan cakupan penuh, lihat Tentukan cakupan kueri.

Langkah 4: Tulis batch

Setiap item dalam permintaan Bulk dapat menentukan _slice sendiri:

POST /_bulk
{ "index": { "_index": "knowledge-chunks", "_id": "chunk-1003", "_slice": "tenant-a" } }
{ "tenant_id": "tenant-a", "document_id": "doc-change-address", "title": "Change delivery address", "content": "Before an order is shipped, you can change the delivery address on the order details page.", "category": "orders", "updated_at": "2026-07-30T10:02:00Z", "embedding": [0.75, 0.16, 0.06, 0.03] }
{ "index": { "_index": "knowledge-chunks", "_id": "chunk-1004", "_slice": "tenant-b" } }
{ "tenant_id": "tenant-b", "document_id": "doc-invoice", "title": "Request an electronic invoice", "content": "After an order is completed, you can request an electronic invoice on the invoice management page.", "category": "billing", "updated_at": "2026-07-30T10:03:00Z", "embedding": [0.18, 0.70, 0.08, 0.04] }

Permintaan Bulk mungkin sebagian berhasil. Pemanggil harus memeriksa field errors tingkat atas dan result atau error setiap item.

Dokumen yang baru saja ditulis mungkin belum muncul dalam hasil kueri atau hitungan dokumen CAT. Untuk memverifikasi segera, tunggu minimal satu siklus Refresh otomatis.

Langkah 5: Verifikasi Collection dan Slice

Lihat status keseluruhan Collection:

GET /_cat/slice_collection/knowledge-chunks?v

Lihat Indeks Pendukung dan hitungan dokumen untuk setiap Slice:

GET /_cat/slice_collection/knowledge-chunks/slices?v

Untuk mendapatkan daftar Slice lengkap secara terstruktur dan terpaginasi, gunakan API daftar Slice:

GET /_slice_collection/knowledge-chunks/slices?page_size=100

Contoh respons:

{
  "slices": [
    { "id": "tenant-a" },
    { "id": "tenant-b" }
  ]
}

Jika respons berisi next_cursor, teruskan apa adanya ke permintaan berikutnya:

GET /_slice_collection/knowledge-chunks/slices?page_size=100&cursor={next_cursor}

Verifikasi keberhasilan dan pembersihan

  • Indikator keberhasilan — Respons daftar Slice berisi tenant-a dan tenant-b. Output CAT Slice menunjukkan docs.count minimal 1 untuk setiap Slice. Permintaan KNN DiskBBQ pada Langkah 3 mengembalikan hits dengan bidang _source yang diharapkan.

  • Titik kegagalan umum — Jika respons KNN mengembalikan array hits kosong segera setelah menulis, data mungkin belum di-Refresh. Tunggu minimal satu siklus index.refresh_interval, atau gunakan refresh=wait_for saat menulis.

  • Bersihkan data contoh — Untuk menghapus Collection contoh, lihat Hapus Collection.

Mode recall klaster vektor: Pemilihan Slice kandidat otomatis

Platform pencarian e-commerce memelihara database vektor produk berskala besar dan telah membagi produk menjadi ribuan klaster vektor melalui pengelompokan offline. Saat pengguna memulai kueri produk serupa, aplikasi hanya memiliki vektor kueri dan tidak dapat menentukan klaster target sebelumnya. Mengkueri semua data produk setiap kali meningkatkan cakupan kueri dan overhead resource seiring pertumbuhan skala data.

Skenario ini cocok untuk mode recall klaster vektor: setiap Slice sesuai dengan klaster vektor, dan vektor centroid klaster tersebut didaftarkan. Saat kueri KNN dieksekusi, sistem pertama-tama menghitung kemiripan antara vektor kueri dan setiap centroid klaster, secara otomatis memilih Slice kandidat yang paling relevan, lalu melakukan pencarian DiskBBQ secara paralel dalam Slice-Slice tersebut, sehingga mempersempit cakupan kueri.

Collection tidak melatih centroid klaster, juga tidak secara otomatis menentukan Slice target berdasarkan vektor dokumen. Aplikasi harus menghitung dan mendaftarkan vektor centroid terlebih dahulu.

Untuk kapan menggunakan dan kapan menghindari mode ini, lihat Panduan pengambilan keputusan.

Langkah 1: Buat Koleksi mode recall kluster vektor

PUT /_slice_collection/products
{
  "slice_strategy": "vector_cluster",
  "auto_create_slice": false,
  "settings": {
    "index.number_of_shards": 2,
    "index.number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "cluster_id": { "type": "keyword" },
      "name": { "type": "keyword" },
      "embedding": {
        "type": "dense_vector",
        "dims": 2,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "bbq_disk"
        }
      }
    }
  },
  "config": {
    "routing_field": "cluster_id",
    "vector_dims": 2,
    "default_query_vector_path": "knn.query_vector",
    "default_query_slice_count": 128,
    "max_query_slice_count": 512
  }
}

config parameter

Wajib

Deskripsi

routing_field

Tidak

Membaca Slice dari bidang tingkat atas dalam dokumen yang ditulis. Jalur bersarang dalam format a.b tidak didukung.

vector_dims

Ya

Dimensi vektor centroid Slice. Nilai valid: 1 hingga 4096.

default_query_vector_path

Ya

Jalur vektor kueri dalam permintaan. Nilai yang didukung: knn.query_vector atau knn.N.query_vector.

default_query_slice_count

Tidak

Jumlah default Slice kandidat. Nilai default: 128. Nilai valid: 1 hingga 10000.

max_query_slice_count

Tidak

Jumlah maksimum Slice kandidat yang diizinkan dalam satu kueri. Nilai default: 512. Nilai ini tidak boleh kurang dari jumlah kandidat default dan tidak boleh melebihi 10000.

Mode namespace (exact) tidak menerima config yang tidak kosong. Jika tidak, HTTP 400 dikembalikan.

Langkah 2: Daftarkan vektor centroid Slice

Daftarkan centroid klaster vektor tunggal:

PUT /_slice_collection/products/slices/cluster-a
{
  "vector": [0.9, 0.1]
}

Tugas pengelompokan offline biasanya menghasilkan beberapa centroid klaster vektor secara bersamaan. Anda dapat menggunakan API batch untuk mendaftarkannya sekaligus:

PUT /_slice_collection/products/slices
{
  "slices": [
    {
      "slice_id": "cluster-b",
      "vector": [0.1, 0.9]
    },
    {
      "slice_id": "cluster-c",
      "vector": [0.6, 0.4]
    }
  ]
}

API batch dapat mendaftarkan hingga 20480 Slice dengan nama unik sekaligus.

Baik API pendaftaran tunggal maupun batch menggunakan error tingkat item: bahkan jika dimensi vektor centroid tidak sesuai dengan config.vector_dims, permintaan tetap mengembalikan HTTP 200. Periksa errors tingkat atas dan result setiap elemen items untuk menentukan apakah pendaftaran berhasil. Permintaan HTTP yang berhasil tidak berarti semua klaster vektor telah didaftarkan.

Dimensi setiap vektor centroid harus sesuai dengan config.vector_dims. Slice tanpa vektor centroid masih dapat diakses secara eksplisit, tetapi tidak akan berpartisipasi dalam pemilihan Slice kandidat otomatis.

Langkah 3: Tulis data vektor

Contoh ini mengonfigurasi routing_field=cluster_id, sehingga sistem dapat membaca Slice dari bidang tingkat atas dokumen tanpa memerlukan _slice:

PUT /products/_doc/product-1
{
  "cluster_id": "cluster-a",
  "name": "example-product",
  "embedding": [0.92, 0.08]
}

Anda juga dapat secara eksplisit memberikan _slice=cluster-a, atau menggunakan routing=cluster-a dengan API yang kompatibel. Saat Anda secara eksplisit menentukan Slice, nilainya harus sesuai dengan nilai bidang routing_field dalam dokumen (dalam contoh ini, cluster_id). Jika tidak, HTTP 400 dikembalikan. Pembaruan dengan skrip tidak didukung saat routing_field dikonfigurasi.

Langkah 4: Pemilihan Slice kandidat otomatis

Setelah menulis data, tunggu minimal satu siklus Refresh otomatis sebelum menjalankan kueri berikut.

POST /products/_search?query_slice_count=64
{
  "knn": {
    "field": "embedding",
    "query_vector": [0.91, 0.09],
    "k": 10,
    "num_candidates": 100
  }
}

Parameter untuk pemilihan Slice kandidat otomatis:

Parameter

Deskripsi

query_slice_count

Batas atas Slice kandidat yang dipilih untuk kueri ini. Saat dihilangkan atau diatur ke 0, nilai default Collection digunakan.

query_vector_path

Mengganti jalur vektor kueri default Collection. Nilai yang didukung: knn.query_vector atau knn.N.query_vector.

query_slice_count tidak boleh melebihi max_query_slice_count. Jika tidak, HTTP 400 dikembalikan.

Saat ini, hanya query_vector inline dalam badan permintaan yang didukung untuk pemilihan Slice kandidat otomatis. API Count tidak secara otomatis memilih Slice kandidat. Anda harus secara eksplisit memberikan _slice.

Verifikasi keberhasilan dan pembersihan

  • Indikator keberhasilan — Respons KNN mengembalikan hits yang diurutkan berdasarkan skor kemiripan. Centroid klaster yang terdaftar muncul dalam respons GET /_slice_collection/products/slices.

  • Titik kegagalan umum — Jika respons KNN kosong, verifikasi bahwa refresh_interval telah berlalu dan dimensi vektor kueri sesuai dengan config.vector_dims. Jika pendaftaran mengembalikan HTTP 200 tetapi Slice tidak muncul, periksa items[].result untuk entri failed dan alasan error terkait.

  • Bersihkan data contoh — Untuk menghapus Collection contoh, lihat Hapus Collection.

Kelola Collection dan Slice

Bagian ini berlaku untuk membuat dataset logis baru atau menyesuaikan parameter kapasitas dan metode alokasi Pendukung untuk Slice berikutnya. Parameter kapasitas menentukan alokasi Slice baru dan tidak menyeimbangkan ulang data yang ada.

Parameter pembuatan

API untuk membuat Collection adalah:

PUT /_slice_collection/{collection}

Parameter kueri:

Parameter

Deskripsi

master_timeout

Waktu maksimum untuk menunggu node master memproses permintaan.

timeout

Waktu maksimum untuk menunggu konfirmasi pembuatan.

Parameter badan permintaan adalah sebagai berikut.

Parameter

Nilai default

Deskripsi

slice_strategy

exact

Mode Collection. Mendukung mode namespace (exact) dan mode recall klaster vektor (vector_cluster). Parameter ini tidak dapat diubah setelah pembuatan.

auto_create_slice

true untuk exact; false untuk vector_cluster

Apakah akan mendaftarkan Slice secara otomatis saat permintaan tulis menemui Slice yang belum ada.

max_slices_per_shard

200

Batas kapasitas lunak untuk setiap shard utama menerima Slice baru.

max_storage_per_shard

50gb

Ambang batas penyimpanan lunak untuk setiap shard utama menerima Slice baru. Atur ke 0b untuk menonaktifkan ambang batas ini.

backing_allocation_strategy

last

Strategi pemilihan Pendukung untuk Slice baru. last lebih memilih Pendukung terbaru yang tersedia. random memilih secara acak dari Pendukung yang tersedia.

settings

{}

Pengaturan indeks Elasticsearch yang digunakan oleh Indeks Pendukung.

mappings

{}

Pemetaan untuk Collection, yang diterapkan secara seragam ke semua Indeks Pendukung.

aliases

{}

Alias Collection yang dibuat bersama Collection. Hanya parameter is_write_index yang didukung.

config

Tidak ada

Konfigurasi untuk mode recall klaster vektor (vector_cluster). Mode namespace (exact) tidak menerima config yang tidak kosong.

Jika Indeks Pendukung memiliki N shard utama, jumlah maksimum Slice yang dapat diterima berdasarkan batas hitungan saja adalah N × max_slices_per_shard. max_slices_per_shard dan max_storage_per_shard hanya menentukan apakah Slice baru berikutnya terus dialokasikan ke Pendukung ini:

  • Setelah salah satu ambang batas tercapai, sistem memilih atau membuat Pendukung lain untuk menampung Slice baru.

  • Slice yang ada dapat terus menerima tulisan.

  • Mengubah ambang batas tidak memigrasi Slice yang ada atau menyeimbangkan ulang data yang ada.

    Dalam sebagian besar skenario, default last sudah cukup. Gunakan random hanya ketika beberapa Pendukung dapat menerima Slice baru secara bersamaan dan Anda ingin mendistribusikan Slice yang baru didaftarkan secara acak.

Lihat Collection

Lihat Collection tunggal:

GET /_slice_collection/knowledge-chunks

Lihat semua Collection:

GET /_slice_collection

API ini mendukung parameter kueri master_timeout.

{collection} mendukung nama yang dipisahkan koma dan wildcard. Nama eksak yang tidak ada mengembalikan HTTP 404. Wildcard tanpa kecocokan mengembalikan objek kosong.

Contoh respons:

{
  "slice_collections": {
    "knowledge-chunks": {
      "collection_uuid": "opaque-system-id",
      "lifecycle_state": "active",
      "max_slices_per_shard": 200,
      "max_storage_per_shard": "50gb",
      "backing_allocation_strategy": "last",
      "future_only_settings": {},
      "auto_create_slice": true,
      "slice_strategy": "exact",
      "max_managed_backing_generation": 0,
      "aliases": {}
    }
  }
}

Respons mungkin juga berisi pengenal yang dikelola sistem dan field generation. Aplikasi harus memperlakukannya sebagai informasi opak dan tidak menggunakannya untuk membangun nama Pendukung atau mengimplementasikan logika bisnis.

Perbarui Collection

API ini digunakan untuk menyesuaikan strategi alokasi untuk Slice yang didaftarkan selanjutnya dan tidak memindahkan Slice yang ada.

Perbarui konfigurasi yang dapat diubah:

POST /_slice_collection/knowledge-chunks/_update
{
  "max_slices_per_shard": 300,
  "max_storage_per_shard": "80gb",
  "backing_allocation_strategy": "last",
  "auto_create_slice": false,
  "settings": {
    "apack.slice_collection.future.index.number_of_shards": 4
  }
}

Parameter kueri:

Parameter

Nilai default

Deskripsi

master_timeout

30s

Menunggu node master memproses permintaan.

timeout

30s

Menunggu konfirmasi pembaruan.

preserve_existing

false

Saat diatur ke true, mempertahankan pengaturan future-only yang ada.

Field yang dapat diperbarui meliputi:

  • max_slices_per_shard

  • max_storage_per_shard

  • backing_allocation_strategy

  • auto_create_slice

  • Pengaturan future-only yang diizinkan dalam settings

    Pengaturan future-only hanya memengaruhi Pendukung yang dibuat setelahnya dan tidak memodifikasi Pendukung yang ada. Pengaturan yang diizinkan secara default adalah:

  • index.number_of_shards

  • index.routing_partition_size

  • index.number_of_routing_shards

    Dalam permintaan _update, pengaturan future-only harus menggunakan awalan apack.slice_collection.future.. Misalnya, index.number_of_shards sesuai dengan apack.slice_collection.future.index.number_of_shards. Saat menulis, awalan datar digunakan. Saat membaca kembali melalui GET /_slice_collection/{collection}, pengaturan disajikan dalam struktur bersarang, misalnya, "future_only_settings": {"index": {"number_of_shards": "4"}}.

Respons yang berhasil adalah {"acknowledged":true}. acknowledged=false menunjukkan bahwa konfirmasi timeout, bukan pembaruan telah dikembalikan.

Perbarui pemetaan dan pengaturan dinamis

Perbarui pemetaan dengan menggunakan nama Collection:

PUT /knowledge-chunks/_mapping
{
  "properties": {
    "channel": { "type": "keyword" }
  }
}

Perbarui pengaturan indeks dinamis dengan menggunakan nama Collection:

PUT /knowledge-chunks/_settings
{
  "index.refresh_interval": "5s"
}

Pemetaan dan pengaturan indeks dinamis diterapkan ke semua Pendukung saat ini dan menjadi konfigurasi seragam untuk Pendukung berikutnya. Jangan memodifikasi Indeks Pendukung individual.

Daftarkan Slice

Saat memilih metode pendaftaran Slice, lihat tabel berikut.

Metode

Skenario yang Berlaku

Pendaftaran otomatis saat tulis

Slice dalam mode namespace (exact) muncul secara dinamis seiring pertumbuhan bisnis, dan bisnis dapat menerima latensi tambahan pada tulis pertama.

Daftarkan Slice tunggal secara eksplisit

auto_create_slice dinonaktifkan, Anda perlu memverifikasi nama terlebih dahulu, atau Anda perlu mendaftarkan vektor centroid untuk Slice klaster vektor.

Pendaftaran batch

Provisioning penyewa batch, impor data batch, atau menyiapkan sejumlah besar Slice yang diketahui sebelum trafik tiba.

Saat auto_create_slice=false, atau saat Anda ingin menyelesaikan persiapan resource sebelum menulis, Anda dapat mendaftarkan Slice secara eksplisit:

PUT /_slice_collection/knowledge-chunks/slices/tenant-c

API ini mendukung parameter kueri master_timeout.

Contoh respons:

{
  "acknowledged": true,
  "errors": false,
  "items": [
    {
      "slice_id": "tenant-c",
      "result": "created",
      "backing_index": ".sc-knowledge-chunks-...-00000"
    }
  ]
}

backing_index hanya untuk pengamatan dan troubleshooting dan tidak boleh digunakan sebagai target untuk permintaan aplikasi selanjutnya.

Daftarkan hingga 20480 Slice dengan nama unik sekaligus:

PUT /_slice_collection/knowledge-chunks/slices
{
  "slices": [
    "tenant-d",
    { "slice": "tenant-e" },
    { "slice_id": "tenant-f" }
  ]
}

API ini mendukung parameter kueri master_timeout. Ketiga format dapat dicampur dalam permintaan yang sama.

Pendaftaran batch mungkin sebagian berhasil. result setiap item mungkin created, updated, noop, atau failed. errors tingkat atas adalah true selama ada item yang gagal. Saat nama Slice tidak valid (misalnya, berisi :, dimulai dengan karakter non-alfanumerik, menggunakan nilai terpesan _all, atau melebihi batas panjang), API pendaftaran juga mengembalikan HTTP 200 dan memberikan failed dan alasan error dalam item yang sesuai.

Daftar Slice dengan paginasi

GET /_slice_collection/knowledge-chunks/slices?prefix=tenant-&page_size=100

Parameter

Nilai default

Deskripsi

page_size

100

Jumlah hasil per halaman. Nilai valid: 1 hingga 10000.

cursor

Tidak ada

next_cursor dari respons halaman sebelumnya.

prefix

Tidak ada

Hanya mengembalikan Slice yang namanya dimulai dengan teks yang ditentukan.

Hasil dikembalikan dalam urutan menaik berdasarkan nama Slice. Jika Slice ditambahkan atau dihapus secara bersamaan selama paginasi, hasilnya konsisten lemah. Pertahankan prefix yang sama saat melanjutkan paginasi.

Hapus Slice

DELETE /_slice_collection/knowledge-chunks/slices/tenant-c

Parameter kueri:

Parameter

Deskripsi

master_timeout

Waktu maksimum untuk menunggu node master memproses permintaan.

timeout

Waktu maksimum untuk menunggu konfirmasi penghapusan.

Respons berhasil:

{
  "acknowledged": true
}

Setelah Slice dihapus, Slice dengan nama yang sama dapat didaftarkan ulang. Data baru diisolasi dari data lama yang menunggu pembersihan di latar belakang. Catatan:

  • Setelah Slice dihapus, kueri yang menentukan nama Slice mengembalikan HTTP 404 (resource_not_found_exception) alih-alih hasil kosong.

  • Kueri cakupan penuh menggunakan _slice=_all mungkin sementara mengembalikan data lama sebelum pembersihan fisik selesai.

  • Respons penghapusan tidak menunjukkan bahwa ruang penyimpanan telah dilepaskan.

Tulis, baca, dan kueri data

Tulis dan baca data

Collection menggunakan kembali API dokumen standar Elasticsearch dan menentukan namespace atau klaster vektor melalui _slice. API umum adalah sebagai berikut.

Metode akses

Skenario yang Berlaku

API dokumen tunggal

Operasi CRUD real-time saat ID dokumen dan Slice diketahui.

Bulk

Menulis log atau konten basis pengetahuan secara batch, atau menulis ke beberapa Slice dalam satu batch.

MGet

Membaca dokumen dari Slice yang sama atau berbeda dalam satu permintaan saat beberapa ID dokumen diketahui.

Reindex

Migrasi data antara indeks reguler dan Collection, atau antara Collection berbeda.

Operasi

API

Tulis atau timpa dokumen

PUT /{collection}/_doc/{id}?_slice={slice}

Buat ID dokumen otomatis

POST /{collection}/_doc?_slice={slice}

Buat dokumen saja

PUT /{collection}/_create/{id}?_slice={slice}

Ambil dokumen

GET /{collection}/_doc/{id}?_slice={slice}

Periksa apakah dokumen ada

HEAD /{collection}/_doc/{id}?_slice={slice}

Ambil _source

GET /{collection}/_source/{id}?_slice={slice}

Perbarui dokumen

POST /{collection}/_update/{id}?_slice={slice}

Hapus dokumen

DELETE /{collection}/_doc/{id}?_slice={slice}

Aturan:

  • Permintaan dokumen tunggal hanya dapat menentukan satu Slice. Nilai yang dipisahkan koma dan _all tidak diizinkan.

  • index, create, dan update dapat mendaftarkan Slice yang belum ada secara otomatis saat auto_create_slice=true. Operasi baca dan hapus tidak mendaftarkan Slice secara otomatis. Menentukan Slice yang belum ada mengembalikan HTTP 404.

  • Beberapa API dokumen dan kueri dapat menggunakan routing untuk merepresentasikan Slice logis. Untuk cakupan yang didukung dan aturan konflik, lihat Parameter kompatibilitas routing.

  • Setiap permintaan Bulk dapat mendaftarkan otomatis hingga 512 Slice yang hilang berbeda. Slice yang ada tidak dihitung terhadap batas ini.

  • wait_for_active_shards tidak digunakan sebagai kondisi untuk menunggu replika dalam pipeline tulis AI Engine Edition. Untuk menunggu dokumen dapat dicari, gunakan refresh=wait_for.

  • Bidang dense_vector tidak termasuk dalam _source yang dikembalikan secara default. Baik GET /{collection}/_doc/{id} maupun GET /{collection}/_source/{id} tidak mengembalikan nilai vektor. Untuk mengembalikannya, tentukan secara eksplisit _source_includes.

Refresh dan visibilitas kueri

Permintaan tulis yang berhasil menunjukkan bahwa data telah dipersisten, bukan bahwa data dapat dikueri oleh node pencarian. AI Engine Edition menggunakan arsitektur tanpa status. Refresh memerlukan node indeks untuk menghasilkan dan menerbitkan Commit baru, lalu node pencarian memuat versi yang dapat dicari. Ini adalah operasi lintas-node terdistribusi dengan overhead lebih tinggi daripada Refresh lokal di Elasticsearch stateful tradisional.

Anda dapat mengkueri dan menyesuaikan index.refresh_interval melalui pengaturan Collection. Nilai saat ini dapat dilihat melalui GET /{collection}/_settings. Interval Refresh yang lebih pendek meningkatkan overhead resource. Untuk produksi, atur ke 5s atau lebih tinggi. Jika Anda memiliki persyaratan visibilitas latensi rendah, sesuaikan nilai berdasarkan beban kerja bisnis Anda. Nilai efektif aktual didasarkan pada pengaturan Collection saat ini. Refresh otomatis dapat dinonaktifkan dengan mengatur nilai ke -1. Sebelum memperpendek interval ini, evaluasi frekuensi penerbitan Commit, throughput tulis, dan I/O penyimpanan objek.

Pilih salah satu metode berikut berdasarkan persyaratan bisnis Anda untuk visibilitas kueri:

Metode

Skenario yang Berlaku

Catatan

Abaikan refresh atau gunakan refresh=false

Skema prioritas throughput seperti impor Bulk berkelanjutan dan penulisan log.

Tulis mengembalikan segera. Refresh latar belakang membuat data tersedia dalam hasil kueri.

refresh=wait_for

Skema baca-setelah-tulis di mana kueri harus dilakukan segera setelah menulis.

Menunggu Refresh terdistribusi berikutnya tanpa memperpendek index.refresh_interval. Gabungkan ke dalam permintaan Bulk untuk menghindari sejumlah besar permintaan dokumen tunggal menunggu secara bersamaan.

refresh=true

Tulisan frekuensi rendah yang benar-benar memerlukan visibilitas segera.

Memicu Refresh terdistribusi segera. Respons berisi "forced_refresh": true dan meningkatkan overhead penerbitan Commit, I/O penyimpanan objek, dan refresh node pencarian. Jangan gunakan ini sebagai parameter tulis reguler.

POST /{collection}/_refresh

Operasi frekuensi rendah atau konfirmasi visibilitas terpadu setelah impor batch.

Me-refresh semua Pendukung Collection saat ini. Anda tidak dapat me-refresh Slice tunggal melalui _slice (permintaan mengembalikan HTTP 400 dengan parameter ini). Overhead tinggi saat Collection besar.

index.refresh_interval=-1 menonaktifkan Refresh otomatis. Dalam kasus ini, tulisan menggunakan refresh=wait_for akan menunggu tanpa batas hingga permintaan lain memicu Refresh eksplisit. Jangan menggabungkan pengaturan ini tanpa proses Refresh eksplisit. Untuk produksi, saat diperlukan baca-setelah-tulis, pilih antara menunggu Refresh otomatis atau Refresh eksplisit berdasarkan persyaratan latensi bisnis Anda, dan evaluasi overhead Refresh terdistribusi. Refresh hanya mengatasi visibilitas kueri. Ini tidak berarti semua replika kueri tersedia dan tidak dapat menggantikan probe kueri dan pemeriksaan ketersediaan tinggi.

Bulk

Setiap item Bulk dapat memberikan _slice sendiri dalam metadata aksi, seperti yang ditunjukkan dalam contoh mulai cepat. Saat semua item dalam batch ditulis ke Slice yang sama, Anda dapat memberikan nilai default di URL:

POST /knowledge-chunks/_bulk?_slice=tenant-a
{ "index": { "_id": "chunk-2001" } }
{ "tenant_id": "tenant-a", "document_id": "doc-account-security", "title": "Account security settings", "content": "Administrators can enable multi-factor authentication on the security settings page." }

_slice dalam item dapat mengganti nilai default URL. Mode namespace tidak menurunkan Slice dari bidang dokumen. Bahkan jika badan dokumen berisi bidang tenant_id, lokasi tulis aktual tetap ditentukan oleh _slice. Untuk penanganan error, lihat Konvensi API umum.

Multi Get

MGet cocok untuk membaca beberapa dokumen dengan ID yang diketahui sekaligus. Setiap item dapat mengakses Slice berbeda:

POST /knowledge-chunks/_mget
{
  "docs": [
    { "_id": "chunk-1001", "_slice": "tenant-a" },
    { "_id": "chunk-1002", "_slice": "tenant-b" }
  ]
}

_slice di URL dapat berfungsi sebagai nilai default. Setiap item dapat mengganti nilai default. Setiap item pada akhirnya harus diselesaikan ke satu Slice.

Reindex

Reindex cocok untuk migrasi data antara indeks reguler dan Collection, atau antara Collection berbeda. Untuk menyalin Slice dalam Collection yang sama, gunakan Copy Slice.

Saat sumber adalah Collection, Anda harus secara eksplisit menentukan source._slice dalam badan permintaan. Jika tidak, HTTP 400 dikembalikan. Saat tujuan adalah Collection, hanya satu Slice tujuan yang dapat ditentukan, dan nilainya harus menggunakan format ={slice}:

POST /_reindex
{
  "source": {
    "index": "source-knowledge-chunks",
    "_slice": "tenant-a,tenant-b"
  },
  "dest": {
    "index": "target-knowledge-chunks",
    "_slice": "=tenant-archive"
  }
}

Slice tujuan didaftarkan secara otomatis jika belum ada. Parameter slices tingkat atas merepresentasikan paralelisme Reindex Elasticsearch dan tidak terkait dengan jumlah Slice bisnis. Saat salah satu sisi adalah Collection, Reindex tidak mendukung skrip. Saat Collection adalah tujuan, pipeline ingest eksplisit tidak didukung.

Kueri data

Kueri Collection terus menggunakan Elasticsearch Query DSL. Bagian ini hanya mencakup cakupan kueri Slice yang ditambahkan oleh AI Engine Edition. Untuk Query DSL dan kemampuan kueri yang tidak tercantum dalam panduan ini, cakupan yang didukung aktual dari instans 9.99.0 yang berlaku.

Menentukan _slice secara eksplisit dalam kueri berlaku untuk kedua mode. Mode namespace biasanya memerlukan cakupan kueri eksplisit. Kueri KNN dalam mode recall klaster vektor dapat secara otomatis memilih beberapa Slice kandidat. Untuk informasi lebih lanjut, lihat Mode recall klaster vektor: Pemilihan Slice kandidat otomatis.

Tentukan cakupan kueri

Cakupan kueri

Skenario yang Berlaku

Contoh

Slice tunggal

Kueri online single-tenant, mencari dalam namespace tertentu

GET /knowledge-chunks/_search?_slice=tenant-a

Beberapa Slice

Kueri agregat untuk sejumlah kecil penyewa yang diketahui, kueri lintas-namespace

GET /knowledge-chunks/_search?_slice=tenant-a,tenant-b

Semua Irisan

Analisis offline, auditing, atau kueri operasi cakupan penuh eksplisit

GET /knowledge-chunks/_search?_slice=_all

Kueri tunggal dapat menentukan hingga 1024 Slice.

Selain batas jumlah Slice, perhatikan batas panjang baris permintaan HTTP 4096 byte. Saat Anda menggunakan nama Slice panjang, too_long_http_line_exception mungkin dikembalikan sebelum mencapai 1024. Dalam kasus ini, perpendek nama Slice, bagi menjadi beberapa kueri, atau gunakan _slice=_all.

Saat daftar kueri mungkin berisi Slice yang belum ada, gunakan:

GET /knowledge-chunks/_search?_slice=tenant-a,tenant-b&ignore_missing_slice=true

Tanpa parameter ini, seluruh permintaan mengembalikan HTTP 404 jika ada Slice yang tidak ada. Saat digunakan dengan _slice=_all, ignore_missing_slice tidak berpengaruh dan diabaikan diam-diam.

API kueri berikut juga mendukung parameter cakupan Slice yang sama:

  • Search dan Count

  • Multi search

  • Search template

  • Async search

  • Validate query

  • Search shards

  • Update by query dan Delete by query

    Update by query, Delete by query, dan Reindex menulis atau menghapus data dan harus secara eksplisit menentukan Slice target. Jika tidak ada Slice yang ditentukan, permintaan ditolak dan mengembalikan HTTP 400.

Kueri semua Slice saat _slice dihilangkan

Secara default, kueri dalam mode namespace memerlukan _slice eksplisit. Jika Anda ingin kueri hanya-baca tanpa _slice secara otomatis mengkueri semua Slice, aktifkan pengaturan kluster berikut:

PUT /_cluster/settings
{
  "persistent": {
    "apack.slice_collection.search.default_to_all_slices": true
  }
}

Setelah pengaturan ini diaktifkan, permintaan berikut setara dengan secara eksplisit menentukan _slice=_all:

GET /knowledge-chunks/_search

Ini adalah pengaturan tingkat kluster yang memengaruhi semua Collection dan hanya berlaku untuk API kueri hanya-baca seperti Search dan Count. Kueri cakupan penuh biasanya memiliki overhead resource lebih tinggi daripada kueri berbasis Slice. Jika hanya beberapa permintaan yang perlu mengkueri semua Slice, terus gunakan _slice=_all secara eksplisit.

Optimalkan pencarian teks dalam Slice tertentu

Jika pencarian kata kunci atau teks lengkap biasanya hanya mengkueri satu atau beberapa Slice tertentu, Anda dapat mengaktifkan index.sliced_postings.enabled saat membuat Collection untuk mengurangi rentang data indeks terbalik yang perlu diakses kueri:

PUT /_slice_collection/knowledge-chunks
{
  "settings": {
    "index.sliced_postings.enabled": true
  }
}

Pengaturan ini default ke false dan hanya dapat dikonfigurasi selama pembuatan Collection. Tidak dapat diubah setelah pembuatan. Setelah mengaktifkan pengaturan ini, Anda masih dapat menggunakan _slice=_all untuk mengkueri semua Slice, tetapi Anda tidak akan mendapatkan manfaat optimasi utama dari membatasi cakupan kueri Slice. Jika bisnis Anda terutama melakukan pencarian teks global, pertahankan default dinonaktifkan.

Setelah mengaktifkan pengaturan ini, bidang completion tidak didukung, dan mengatur fielddata=true untuk bidang text tidak didukung.

Praktik terbaik kueri

  • Saat menggunakan mode namespace, atau saat permintaan tidak mendukung pemilihan Slice kandidat otomatis, tentukan secara eksplisit satu atau beberapa Slice. Hindari menggunakan _slice=_all sebagai metode akses default.

  • Saat menggunakan mode recall klaster vektor, tentukan query_slice_count melalui pengujian tingkat recall dan overhead kueri. Jangan meningkatkan jumlah Slice kandidat secara membabi buta.

  • Overhead kueri _all bertambah seiring jumlah Pendukung dan shard. Evaluasi cakupan kueri, timeout, dan beban kluster sebelum eksekusi.

  • Gunakan ignore_missing_slice=true untuk Slice opsional yang mungkin tidak ada. Jangan mencoba ulang seluruh batch karena satu Slice yang hilang.

  • Aplikasi harus menggunakan Slice yang konsisten saat menulis, membaca, memperbarui, dan menghapus dokumen yang sama.

Fitur lanjutan

Warm Slice cache

API _warm_slice memuat data yang mungkin diakses oleh kueri berikutnya ke Slice tertentu dari penyimpanan objek ke cache bersama di node pencarian, mengurangi latensi kueri pertama untuk data dingin. Cakupan pemanasan mencakup vektor DiskBBQ, data indeks terbalik terkait Slice, nilai dokumen, dan bidang yang disimpan, serta mencakup semua replika yang dapat dicari dari shard tempat Slice berada.

Pemanasan hanya untuk optimasi cache. Ini hanya memengaruhi kecepatan akses berikutnya, tidak mengubah hasil kueri, dan tidak menjamin berapa lama data tetap dalam cache.

Kasus penggunaan pemanasan:

  • Pengguna akan membuka basis pengetahuan, repositori kode, atau ruang memori Agent yang belum diakses dalam waktu lama. Anda dapat memanaskan Slice yang sesuai sebelum kueri pertama.

  • Setelah impor batch atau migrasi data selesai, Anda dapat memanaskan Slice yang akan diaktifkan sebelum mengalihkan trafik kueri.

  • Namespace tertentu diketahui mengalami puncak akses selama periode waktu tertentu. Anda dapat memanaskan Slice ini terlebih dahulu.

    Pemanasan aktif tidak disarankan saat akses data tidak dapat diprediksi, saat sejumlah besar Slice perlu dipanaskan sekaligus, atau saat Slice target sudah merupakan data panas. Pemanasan skala besar mengonsumsi penyimpanan objek dan sumber daya jaringan, cache, dan komputasi node pencarian. Ini juga dapat mengeluarkan data panas yang ada dari cache.

Mulai pemanasan async

Secara default, tugas pemanasan dikirim secara asinkron:

POST /knowledge-chunks/_warm_slice?_slice=tenant-a

Permintaan mengembalikan HTTP 200. Field status dalam badan respons adalah ACCEPTED, dan respons mencakup ID tugas untuk tugas pemanasan ini:

{
  "status": "ACCEPTED",
  "message": "cache warm hint accepted",
  "task": "{nodeId}:{taskId}"
}

Gunakan API berikut untuk mengkueri tugas yang sedang berjalan:

GET /_tasks/{nodeId}:{taskId}

Secara default, hasil tugas tidak dipertahankan setelah selesai. Untuk mengkueri hasil tugas setelah selesai, atur store_result=true saat mengirim tugas:

POST /knowledge-chunks/_warm_slice?_slice=tenant-a&store_result=true

Mode async tidak memvalidasi apakah Slice target ada. Memulai pemanasan async untuk Slice yang tidak ada juga mengembalikan ACCEPTED, tetapi tidak ada pemanasan yang dilakukan dan tidak ada error yang dikembalikan. Skrip pemanasan batch harus terlebih dahulu mengonfirmasi daftar Slice atau menggunakan mode sinkron (mode sinkron mengembalikan HTTP 404 untuk Slice yang tidak ada).

Tunggu pemanasan selesai

Untuk langsung mendapatkan statistik pemanasan, tunggu secara sinkron:

POST /knowledge-chunks/_warm_slice?_slice=tenant-a&wait_for_completion=true&timeout=60s

Parameter kueri:

Parameter

Wajib

Nilai default

Deskripsi

slice atau _slice

Ya

Tidak ada

Slice yang akan dipanaskan. Saat kedua parameter hadir, nilainya harus sama. Jika tidak, HTTP 400 dikembalikan.

wait_for_completion

Tidak

false

Apakah akan menunggu semua replika yang dapat dicari mengembalikan hasil pemanasan.

store_result

Tidak

false

Apakah akan mempertahankan hasil setelah tugas selesai untuk dikueri melalui API Tasks.

timeout

Tidak

Tidak ada

Waktu maksimum untuk menunggu respons shard, misalnya, 60s.

Respons sinkron mencakup informasi _shards standar dan field statistik berikut:

Field

Deskripsi

segments_matched

Jumlah segmen dalam data yang dapat dicari saat ini yang cocok dengan Slice.

docs_read

Jumlah dokumen yang dibaca saat merencanakan cakupan pemanasan.

ranges_requested

Jumlah rentang data yang diminta untuk pemanasan.

ranges_warmed

Jumlah rentang data yang dipanaskan.

ranges_skipped

Jumlah rentang data yang dilewati karena file digabung atau dihapus.

bytes_requested

Jumlah byte yang diminta untuk pemanasan.

Perhatikan hal berikut saat menggunakan API ini:

  • Setiap permintaan hanya dapat menentukan satu Collection dan satu Slice. Slice yang hilang tidak didaftarkan secara otomatis. _all tidak dapat digunakan.

  • Permintaan pemanasan bersamaan untuk replika shard kueri dan Slice yang sama digabung. Anda tidak perlu mengirim permintaan duplikat.

  • Pemanasan hanya memproses data yang dapat dicari pada saat permintaan dikirim. Data baru yang menjadi dapat dicari setelahnya tidak termasuk dalam hasil pemanasan ini.

  • ranges_skipped lebih besar dari 0 tidak selalu menunjukkan kegagalan pemanasan. Saat file digabung atau dihapus selama pemanasan, rentang yang sesuai dilewati.

  • Pemanasan mengonsumsi bandwidth baca penyimpanan objek dan sumber daya node pencarian. Untuk produksi, gunakan mode async default dan kendalikan jumlah Slice yang dipanaskan secara bersamaan.

  • Saat antrian pemanasan penuh, server mungkin menolak permintaan baru. Klien harus menggunakan backoff dengan batas atas. Jangan mencoba ulang semua Slice secara bersamaan segera.

Pengindeksan vektor DiskBBQ

DiskBBQ sesuai dengan tipe indeks bbq_disk dari dense_vector. Ini adalah kemampuan pengindeksan vektor yang digunakan dalam shard, bukan mode Collection ketiga. Baik mode namespace maupun mode recall klaster vektor dapat menggunakan DiskBBQ. Bagian ini menjelaskan metode konfigurasi dan kueri. Untuk referensi kinerja AI Engine Edition, lihat Ikhtisar fitur.

Kasus penggunaan DiskBBQ:

  • Skala vektor besar, dan Anda ingin mengurangi tekanan memori resident melalui pengindeksan vektor native disk.

  • Anda dapat menggunakan set data evaluasi bisnis untuk menyetel keseimbangan antara tingkat recall, latensi kueri, dan overhead baca data.

    DiskBBQ tidak disarankan sebagai pendekatan default saat dataset kecil, hasil tetangga terdekat eksak diperlukan, atau evaluasi tingkat recall belum selesai.

Konfigurasikan pemetaan

Contoh mulai cepat mode namespace telah mengonfigurasi DiskBBQ saat membuat Collection. Untuk Collection lain yang belum memiliki bidang vektor, Anda dapat menambahkan bidang dengan menggunakan API Mapping:

PUT /{collection}/_mapping
{
  "properties": {
    "embedding": {
      "type": "dense_vector",
      "dims": 4,
      "index": true,
      "similarity": "cosine",
      "index_options": {
        "type": "bbq_disk"
      }
    }
  }
}

Saat Anda hanya menentukan "type": "bbq_disk", server mengisi nilai default index_options yang tersisa. Anda dapat melihat konfigurasi efektif aktual dengan membaca kembali pemetaan, di mana rescore_vector.oversample diaktifkan secara default:

{
  "index_options": {
    "type": "bbq_disk",
    "cluster_size": 384,
    "flat_index_threshold": -1,
    "default_visit_percentage": 0.0,
    "rescore_vector": { "oversample": 3.0 },
    "bits": 1
  }
}

Dimensi vektor dan metrik kemiripan harus sesuai dengan model yang digunakan untuk menghasilkan vektor. Jika Anda perlu mengganti tipe indeks untuk bidang vektor yang ada, buat Collection target, konfigurasikan pemetaan baru, lalu gunakan Reindex untuk migrasi data dan evaluasi ulang.

Jalankan kueri KNN

Permintaan berikut didasarkan pada data dari contoh mulai cepat mode namespace dan menggunakan visit_percentage untuk menyesuaikan rentang akses DiskBBQ dalam Slice yang ditentukan:

POST /knowledge-chunks/_search?_slice=tenant-a
{
  "knn": {
    "field": "embedding",
    "query_vector": [0.80, 0.12, 0.05, 0.03],
    "k": 10,
    "visit_percentage": 10.0
  },
  "_source": ["document_id", "title", "content"]
}

Parameter

Deskripsi

k

Jumlah tetangga terdekat yang akan dikembalikan.

visit_percentage

Persentase vektor yang akan dikunjungi per shard. Nilai valid: 0 hingga 100. Nilai lebih tinggi umumnya meningkatkan recall tetapi juga meningkatkan komputasi dan overhead baca. Saat secara eksplisit diatur ke nilai lebih besar dari 0, num_candidates tidak lagi menentukan rentang akses.

num_candidates

Digunakan untuk menurunkan rentang akses kandidat saat visit_percentage valid tidak secara eksplisit ditentukan.

filter

Menambahkan pemfilteran terstruktur untuk mengurangi kandidat yang tidak relevan.

rescore_vector

Menilai ulang kandidat yang diperoleh dari pengambilan terkuantisasi menggunakan vektor asli. Ini dapat mengganti nilai default oversample dalam pemetaan.

DiskBBQ dan mode recall klaster vektor beroperasi pada level berbeda: mode recall klaster vektor pertama-tama memilih Slice kandidat dari semua klaster vektor, lalu DiskBBQ mengeksekusi KNN dalam shard fisik Slice tersebut. Keduanya dapat digunakan bersama, tetapi Anda harus mengontrol query_slice_count dan rentang akses vektor secara terpisah untuk menghindari cakupan kueri berlebihan.

Alias Collection

Alias Collection menyediakan aplikasi dengan nama akses stabil. Alias dapat digunakan untuk mengkueri beberapa Collection secara seragam atau mengalihkan target tulis. Anda dapat menambahkan Alias saat membuat Collection melalui field aliases, atau mengelola Alias dengan menggunakan API Elasticsearch standar _aliases.

Kasus penggunaan Alias Collection:

  • Migrasi versi: Aplikasi selalu mengakses Alias tetap. Setelah persiapan data selesai, alihkan target tulis dari Collection lama ke Collection baru.

  • Kueri multi-Collection: Kueri beberapa Collection yang menggunakan slice_strategy yang sama melalui satu Alias.

  • Decoupling aplikasi: Konfigurasi bisnis hanya menyimpan Alias dan tidak bergantung langsung pada nama Collection yang berisi versi atau tanggal.

    Alias Collection tidak berlaku jika bisnis Anda bergantung pada filter Alias atau routing, atau jika Anda ingin menyertakan indeks reguler dan Collection dalam Alias yang sama.

Contoh berikut mengasumsikan bahwa knowledge-chunks-v1 dan knowledge-chunks-v2 keduanya adalah Collection yang menggunakan mode namespace (exact). Tambahkan keduanya ke Alias yang sama dan atur knowledge-chunks-v2 sebagai target tulis:

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "knowledge-chunks-v1",
        "alias": "knowledge-chunks-current"
      }
    },
    {
      "add": {
        "index": "knowledge-chunks-v2",
        "alias": "knowledge-chunks-current",
        "is_write_index": true
      }
    }
  ]
}

Lihat Alias:

GET /_alias/knowledge-chunks-current

Hapus anggota dari Alias:

POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "knowledge-chunks-v1",
        "alias": "knowledge-chunks-current"
      }
    }
  ]
}

Perhatikan hal berikut saat menggunakan Alias:

  • Anggota Alias yang sama harus menggunakan slice_strategy yang sama. Anggota yang menggunakan mode recall klaster vektor (vector_cluster) juga harus menggunakan dimensi vektor yang sama.

  • Saat Alias multi-anggota digunakan untuk tulis, tepat satu anggota harus memiliki is_write_index=true.

  • API seperti Search, Count, dan Bulk dapat mengakses Alias multi-anggota berdasarkan semantik Alias.

  • GET dokumen tunggal dan setiap item dalam MGet harus diselesaikan secara unik ke satu Collection. Oleh karena itu, hanya Alias single-anggota yang dapat digunakan.

  • filter, routing, index_routing, search_routing, is_hidden, dan remove_index saat ini tidak didukung untuk Alias.

    Saat Anda mengkueri Alias multi-anggota, Slice target harus ada di semua Collection anggota. Jika tidak, HTTP 404 dikembalikan. Selama migrasi versi, set Slice Collection lama dan baru biasanya berbeda. Dalam kasus ini, secara eksplisit sertakan ignore_missing_slice=true, misalnya, GET /knowledge-chunks-current/_search?_slice=tenant-a&ignore_missing_slice=true, sehingga permintaan melewati anggota yang hilang dan mengembalikan normal.

Salin Slice

Salin Slice menyalin dokumen yang dapat direplikasi dari satu Slice ke Slice lain dalam Collection yang sama secara online. Ini cocok untuk migrasi data, bukan untuk snapshot titik-waktu, backup, atau pengalihan trafik atomik.

Kasus penggunaan Salin Slice:

  • Salin data pengujian atau verifikasi untuk penyewa sambil mempertahankan pemetaan Collection yang sama dengan Slice sumber.

  • Siapkan namespace baru dalam Collection yang sama. Setelah Salin selesai dan diverifikasi, lapisan aplikasi mengalihkan nama akses.

  • Lakukan migrasi data online untuk Slice sambil menjaga Slice sumber dan tujuan tetap dapat dibaca dan ditulis.

    Tulisan mungkin masih terjadi selama Salin. Oleh karena itu, hasilnya bukan snapshot titik-waktu dari sumber. Untuk backup, pemulihan bencana, snapshot konsisten ketat, atau pengalihan trafik atomik, jangan gunakan Salin Slice.

Mulai Salin async

POST /_slice_collection/knowledge-chunks/slices/tenant-a/_copy/tenant-a-copy?wait_for_completion=false
{
  "workers": 8,
  "batch_size": 5000,
  "requests_per_second": -1
}

Parameter kueri:

Parameter

Nilai default

Deskripsi

wait_for_completion

true

Apakah akan menunggu Salin selesai. Atur ke false untuk async.

timeout

30s

Waktu tunggu untuk permintaan HTTP saat ini. Timeout tidak menghentikan Salin latar belakang.

Parameter badan permintaan semuanya opsional:

Parameter

Nilai default

Nilai valid atau deskripsi

workers

Setengah jumlah prosesor pada node eksekusi, dibulatkan ke atas

1 hingga 64.

batch_size

5000

1 hingga 10000.

requests_per_second

-1

-1 berarti tanpa pembatasan laju. Anda juga dapat mengatur angka positif untuk pembatasan laju.

Permintaan async mengembalikan HTTP 202 Accepted. Simpan copy_id dari respons dan sebaiknya gunakan status_url dan cancel_url yang dikembalikan oleh server:

{
  "copy_id": "tenant-a-copy:1h",
  "completed": false,
  "timed_out": false,
  "state": "RUNNING",
  "source": "tenant-a",
  "target": "tenant-a-copy",
  "workers": 8,
  "progress": { "total": 0, "created": 0, "version_conflicts": 0 },
  "status_url": "/_slice_collection/knowledge-chunks/_copy/tenant-a-copy%3A1h",
  "cancel_url": "/_slice_collection/knowledge-chunks/_copy/tenant-a-copy%3A1h/_cancel"
}

copy_id terdiri dari nama Slice tujuan dan akhiran yang dihasilkan sistem yang berisi karakter terpesan URL seperti titik dua. Saat Anda membangun URL kueri status secara manual, encoding URL diperlukan. Gunakan status_url dan cancel_url langsung dari respons.

Respons untuk Salin yang sedang berjalan mencakup objek progress. Setelah Salin berakhir, field ini menjadi result dan mencakup field took (dalam milidetik) yang merepresentasikan waktu yang berlalu. Field version_conflicts yang relevan dengan badan dokumen terletak di progress atau result.

Saat menggunakan default wait_for_completion=true, jika Salin selesai dalam timeout, API mengembalikan HTTP 200. Jika waktu tunggu habis, API mengembalikan HTTP 202 dengan timed_out=true, dan Salin latar belakang berlanjut.

Kueri status Salin

GET /_slice_collection/knowledge-chunks/_copy/{copy_id}

state dapat berupa RUNNING, CANCELLING, SUCCEEDED, FAILED, atau CANCELLED. Kueri status mungkin mengembalikan HTTP 200 bahkan saat state=FAILED. Pemanggil harus memeriksa state dan error.

Status selesai dipertahankan selama 1d secara default. Setelah itu, kueri mungkin mengembalikan HTTP 404. Pemanggil tidak boleh menggunakan API status Salin sebagai penyimpanan audit jangka panjang.

Periode retensi dikontrol oleh pengaturan kluster dinamis apack.slice_collection.copy.reservation_retention. Nilai default adalah 1d dan nilai minimum adalah 1h:

PUT /_cluster/settings
{
  "persistent": {
    "apack.slice_collection.copy.reservation_retention": "1d"
  }
}

Batalkan Salin

POST /_slice_collection/knowledge-chunks/_copy/{copy_id}/_cancel

Pembatalan tidak menghapus Slice tujuan atau dokumen yang telah disalin. Pembatalan bersifat asinkron: API mengembalikan HTTP 202 dan state berubah menjadi CANCELLING. Terus polling status hingga state berubah menjadi CANCELLED. Pada titik itu, cancel_url dalam respons menghilang.

Semantik data Salin

  • Slice sumber dan tujuan harus termasuk dalam Collection yang sama dan tidak boleh memiliki nama yang sama.

  • Slice tujuan didaftarkan secara otomatis jika belum ada, bahkan jika auto_create_slice=false Collection.

  • Saat Slice tujuan sudah berisi dokumen yang dapat dicari, permintaan inisiasi Salin ditolak dan mengembalikan HTTP 409 dengan tipe error target_lifecycle_conflict.

  • Salin menggunakan tulis hanya-buat dan tidak menimpa dokumen yang ada dengan _id yang sama di Slice tujuan. Konflik dihitung dalam version_conflicts, dan dokumen lain terus disalin. Setelah Salin selesai, periksa field ini dan tangani data ID yang sama berdasarkan persyaratan bisnis Anda.

  • Kedua Slice sumber dan tujuan dapat dibaca dan ditulis selama Salin. Oleh karena itu, hasilnya bukan snapshot titik-waktu atomik dari Slice sumber.

  • Slice sumber harus mempertahankan _source lengkap untuk merekonstruksi dokumen. Salin ditolak saat _source dinonaktifkan, _source sintetis digunakan, _source.includes tidak kosong dikonfigurasi, atau _source.excludes tidak dapat dibuktikan aman.

  • Salin tidak didukung saat pemetaan Slice sumber berisi bidang inferensi seperti semantic_text.

  • Pipeline ingest default/akhir tidak dieksekusi ulang selama Salin.

  • Dokumen diterapkan ulang terhadap pemetaan saat ini dari tujuan. Misalnya, multi-bidang yang baru ditambahkan akan dihasilkan di tujuan.

    Untuk mengalihkan trafik bisnis setelah Salin selesai, periksa status dan hasil Salin di lapisan aplikasi, lalu alihkan ke Slice tujuan melalui konfigurasi bisnis.

Operasional dan izin

Pemantauan kluster

Di panel navigasi kiri halaman detail instans di Konsol, pilih Monitoring and Logs > Cluster Monitoring untuk melihat metrik operasional instans. Saat mengonfigurasi ambang batas peringatan, atur berdasarkan SLO bisnis Anda dan garis dasar uji stres. Nama metrik spesifik dan titik masuk peringatan didasarkan pada Konsol.

Tabel berikut mencantumkan pemetaan antara target pengamatan umum dan metrik Konsol.

Target pengamatan

Metrik Konsol

Dimensi

Throughput tulis

QPS tulis kluster

Tingkat kluster

Latensi tulis

Latensi tulis rata-rata kluster

Tingkat kluster

Throughput kueri

QPS kueri kluster

Tingkat kluster

Latensi kueri

Latensi pencarian rata-rata kluster

Tingkat kluster

Pemanfaatan CPU

Pemanfaatan CPU node (bisnis ES), Pemanfaatan CPU node (total)

Tingkat node

Pemanfaatan memori heap

Pemanfaatan memori heap node (bisnis ES)

Tingkat node

Penolakan

Tugas yang ditolak oleh kolam thread tulis, permintaan yang ditolak oleh kolam thread kueri

Dimensi kolam thread

Halaman pemantauan kluster mengelompokkan metrik berdasarkan kategori dan tidak menyediakan pengelompokan berbasis role untuk node indeks dan node pencarian. Untuk mengamati dua jenis node secara terpisah, alihkan Tipe Resource ke Node Tertentu lalu filter berdasarkan nama node: nama node indeks berisi -index-, dan nama node pencarian berisi -search-. AI Engine Edition tidak memiliki node hangat. Anda hanya perlu memantau node indeks, node pencarian, dan metrik pemantauan yang sebenarnya disediakan oleh AI Engine Edition.

API CAT

API CAT cocok untuk pengamatan manual dan troubleshooting. Untuk ikhtisar harian, mulai dengan Collection. Saat terjadi anomali kapasitas atau shard, periksa Pendukung. Untuk menemukan distribusi data dan hitungan dokumen namespace tertentu, periksa Slice. Aplikasi tidak boleh bergantung pada output CAT untuk permintaan bisnis.

Tingkat pengamatan

API

Informasi utama

Collection

GET /_cat/slice_collection[/{name}]

Status siklus hidup, jumlah Pendukung, jumlah Slice, kapasitas, hitungan dokumen, dan ukuran penyimpanan

Pendukung

GET /_cat/slice_collection/{collection}/backings[/{backing}]

Status kesehatan, apakah Slice baru diterima, shard, replika, kapasitas, dan hitungan shard tidak ditugaskan

Slice

GET /_cat/slice_collection/{collection}/slices[/{slice}]

Pendukung Slice, shard target, jumlah replika, dan hitungan dokumen

Kolom default:

Tingkat pengamatan

Kolom default

Collection

collection, state, backings, slices, capacity, remaining, docs.count, pri.store.size, store.size

Pendukung

backing, health, assign, pri, rep, slices, capacity, remaining, docs.count, pri.store.size, store.size, unassigned

Slice

slice, backing, shardIds, rep, docs.count

Parameter kueri umum:

Parameter

Deskripsi

v

Apakah akan menampilkan header.

format

Format output, seperti json, yaml, atau text.

h

Mengembalikan hanya kolom yang ditentukan.

s

Sortir berdasarkan kolom yang ditentukan.

bytes

Tentukan unit untuk ukuran penyimpanan.

help

Tampilkan kolom yang tersedia.

CAT Slice juga mendukung backing={backing} untuk mempersempit cakupan ke nama Pendukung lengkap tertentu. Sortir di semua Pendukung berdasarkan docs.count adalah kueri berbiaya tinggi dan memerlukan pengaturan eksplisit allow_expensive_search=true.

Untuk pemrosesan terprogram, gunakan format=json dan tentukan kolom secara eksplisit:

GET /_cat/slice_collection/knowledge-chunks?format=json&h=collection,state,backings,slices,docs.count,pri.store.size

API CAT dirancang untuk troubleshooting manual dan kueri operasi terbatas:

  • CAT Slice mengembalikan maksimal 10000 baris. Saat batas terlampaui, header HTTP Warning menunjukkan bahwa hasil tidak lengkap.

  • Saat Anda memerlukan daftar Slice lengkap dan stabil terpaginasi, gunakan GET /_slice_collection/{collection}/slices.

  • docs.count adalah data near-real-time. Dokumen yang telah ditulis tetapi belum di-refresh mungkin tidak dihitung.

  • pri.store.size dan store.size merepresentasikan ukuran data yang diindeks, yang tidak setara dengan penggunaan disk lokal pada node tanpa status. Ukuran ini juga tidak termasuk data historis dalam penyimpanan objek yang menunggu pembersihan.

Hapus Collection

API ini berlaku untuk mengambil data bisnis offline atau membersihkan contoh dalam panduan ini. Penghapusan menghapus konfigurasi Collection dan data yang dikelola sistem. Operasi ini tidak dapat dikembalikan. Untuk membersihkan hanya Slice tertentu, gunakan API hapus Slice.

DELETE /_slice_collection/knowledge-chunks

Parameter kueri:

Parameter

Deskripsi

master_timeout

Waktu maksimum untuk menunggu node master memproses permintaan.

timeout

Waktu maksimum untuk menunggu konfirmasi penghapusan.

Respons berhasil:

{
  "acknowledged": true
}

{collection} mendukung nama yang dipisahkan koma. Secara default, wildcard * dan _all tidak diizinkan. Permintaan mengembalikan HTTP 400. Untuk menggunakannya, sesuaikan pengaturan kluster action.destructive_requires_name.

Penghapusan mengembalikan HTTP 409 saat operasi Salin Slice sedang berjalan atau dibatalkan. Pembatalan bersifat asinkron. Penghapusan masih akan ditolak hingga state berubah menjadi CANCELLED. Konfirmasi bahwa state=CANCELLED sebelum mengeksekusi penghapusan.

acknowledged=true menunjukkan bahwa penghapusan resource logis dan metadata telah dikonfirmasi. Indeks historis dan file Translog dalam penyimpanan objek diklaim kembali secara asinkron oleh proses latar belakang. Ruang fisik tidak dijamin dilepaskan segera saat respons dikembalikan.

Izin Koleksi

Operasi

Izin yang diperlukan

Buat, perbarui, atau hapus Collection atau Slice

Izin indeks manage pada Collection

Panggil POST /{collection}/_warm_slice untuk memanaskan Slice

Izin indeks manage pada Collection

Gunakan GET /_tasks/{taskId} untuk mengkueri tugas pemanasan async

Izin kluster monitor

Panggil POST /{collection}/_refresh untuk me-refresh Collection secara eksplisit

Izin indeks maintenance pada Collection

Mulai atau batalkan Copy Slice

Izin indeks manage pada Collection

Ambil Collection, daftar Slice, gunakan CAT, atau kueri status Salin

Izin indeks monitor pada Collection

Baca/tulis dokumen dan kueri

Izin indeks read atau write yang sesuai

Buat dan modifikasi Alias Collection

Izin indeks manage pada nama Collection dan nama Alias

Saat mengonfigurasi role, nama indeks harus mencakup nama Collection dan wildcard Pendukung yang sesuai:

<collection>
.sc-<collection>-*

Misalnya, jika nama Collection adalah knowledge-chunks, konfigurasikan knowledge-chunks dan .sc-knowledge-chunks-* dalam role. Mengonfigurasi hanya nama Collection menyebabkan operasi seperti baca/tulis dokumen tunggal, MGet, Refresh eksplisit, dan _update_by_query mengembalikan HTTP 403.

.sc-* hanya untuk konfigurasi izin. Aplikasi masih harus mengakses data melalui nama Collection dan tidak boleh mengakses atau menyimpan nama Indeks Pendukung tertentu secara langsung.

Slice bukan batas isolasi izin penyewa. Untuk mengisolasi izin, implementasikan di lapisan aplikasi atau melalui model keamanan Elasticsearch yang didukung lainnya.

Referensi

AI Engine Edition 9.99.0 menggunakan arsitektur tanpa status dan tidak sepenuhnya mewarisi semua fitur, pengaturan indeks, dan metode operasi Elasticsearch stateful tradisional. Konten berikut hanya mencantumkan perbedaan umum dan berdampak tinggi selama migrasi, bukan daftar lengkap semua fitur yang tidak kompatibel. Tidak adanya kemampuan dari tabel ini tidak berarti didukung. Sebelum menggunakan API, pengaturan indeks, atau fitur operasi Elasticsearch apa pun yang tidak dijelaskan dalam panduan ini, konfirmasi cakupan yang didukung aktual dari instans dan validasi dengan data bisnis nyata.

Perbedaan umum dari Elasticsearch stateful tradisional

Pengaturan yang ditandai sebagai tidak berlaku dalam tabel berikut mungkin mengembalikan HTTP 200 saat dimodifikasi, dan nilai baru mungkin terlihat saat dibaca kembali. Ini tidak menunjukkan bahwa fitur diaktifkan.

Kemampuan atau pengaturan Elasticsearch stateful tradisional

Perbedaan dalam AI Engine Edition 9.99.0

Rekomendasi

Manajemen Siklus Hidup Indeks (ILM), _ilm/*, dan index.lifecycle.*

Manajemen dan eksekusi kebijakan ILM tidak didukung. API terkait tidak terdaftar. index.lifecycle.name adalah pengaturan yang tidak dikenali. Kebijakan ILM yang ada tidak dapat dimigrasikan langsung.

Untuk data log dan time-series, gunakan Siklus Hidup Data Stream saat instans mendukung kemampuan tersebut. Untuk indeks reguler, gunakan penjadwal eksternal untuk memanggil API Rollover, Hapus Indeks, dan lainnya yang didukung instans.

Tier data hot, warm, cold, frozen dan migrasi berbasis _tier_preference

Model tier data tradisional data_* dan migrasi tier tidak digunakan. Pengaturan _tier_preference tidak berlaku dan tidak berpengaruh.

Gunakan penyimpanan objek untuk mempertahankan data. Rencanakan secara terpisah node indeks dan node pencarian. Kelola data historis berdasarkan kebijakan retensi bisnis Anda, dan gunakan downsampling saat instans mendukung kemampuan tersebut.

Watcher

Rantai eksekusi pemicu, kondisi, dan notifikasi Watcher tidak didukung. API terkait tidak terdaftar.

Gunakan CloudMonitor, peringatan Log Service (SLS), platform peringatan perusahaan, atau tugas terjadwal eksternal.

Pipeline koleksi lokal Legacy Stack Monitoring

Metode koleksi yang bergantung pada xpack.monitoring.collection.* dan indeks lokal .monitoring-* tidak didukung. Pengaturan kluster terkait tidak berlaku dan tidak berpengaruh.

Gunakan pemantauan dan log Konsol. Saat diperlukan pengamatan sisi aplikasi, gunakan API statistik kluster dan node yang didukung instans.

Tugas Rollup dan _rollup_search

Tugas Rollup legacy dan API kuerinya tidak didukung. API terkait tidak terdaftar.

Pilih Downsample, Transform, atau tugas agregasi eksternal berdasarkan tipe data, dan dasarkan implementasi Anda pada API yang didukung instans.

Snapshot yang Dapat Dicari, pemasangan snapshot, dan transisi tier frozen

Semantik pemasangan Snapshot yang Dapat Dicari tidak didukung. API pemasangan tidak terdaftar, dan proses tier frozen tidak dapat digunakan kembali.

Gunakan indeks native penyimpanan objek untuk data online. Untuk backup dan pemulihan, gunakan Snapshot/Pemulihan standar saat instans mendukung kemampuan tersebut.

index.auto_expand_replicas

Replika kueri tidak disesuaikan secara otomatis berdasarkan jumlah node pencarian. Pengaturan ini tidak berlaku dan tidak memperluas replika secara otomatis.

Konfigurasikan secara eksplisit index.number_of_replicas dan sesuaikan node pencarian berdasarkan kapasitas kueri dan persyaratan ketersediaan tinggi.

index.translog.durability=async

Mengatur ketahanan Translog ke async tidak didukung. Permintaan modifikasi ditolak. Konfirmasi tulis menggunakan ketahanan request.

Optimalkan throughput tulis melalui ukuran Bulk, konkurensi, frekuensi refresh, perencanaan shard, dan kapasitas node indeks.

wait_for_active_shards

Tidak digunakan sebagai kondisi menunggu replika dalam pipeline tulis AI Engine Edition. Bahkan saat diatur ke all, ini tidak berarti semua replika kueri tersedia.

Periksa respons tulis secara terpisah, gunakan refresh=wait_for untuk memverifikasi visibilitas kueri, dan konfirmasi kesiapan layanan kueri melalui probe kueri nyata.

Selain itu, replika dalam arsitektur tanpa status terutama digunakan untuk kueri dan cache. Replika ini tidak setara dengan replika persisten dalam Elasticsearch stateful tradisional yang dapat dipromosikan menjadi shard utama. Jumlah replika kueri dan node pencarian bersama-sama menentukan kapasitas dan ketersediaan kueri. Data persisten disimpan dalam penyimpanan objek. Meningkatkan jumlah replika tidak dapat menggantikan strategi backup.

Batasan saat menggunakan Collection dan Slice

Batasan berikut hanya berlaku untuk penggunaan Collection dan Slice dalam AI Engine Edition. Ini tidak berarti kemampuan dengan nama yang sama juga tidak tersedia untuk indeks reguler.

Nama dan batasan batch

Item

Batas

Nama Koleksi

Mengikuti aturan penamaan indeks dan Alias Elasticsearch. Harus huruf kecil. Panjang tidak boleh melebihi 128 byte. Awalan .sc- yang dipesan sistem tidak dapat digunakan.

Nama Slice

Panjang: 1 hingga 128 karakter. Karakter pertama dan terakhir harus alfanumerik. Karakter tengah dapat berupa alfanumerik, ., _, atau -. Tidak boleh berisi :. _all adalah nilai terpesan.

Irisan per permintaan Pencarian Tunggal

Maksimal 1024, juga tunduk pada batas panjang baris permintaan HTTP 4096 byte.

Slice yang hilang dibuat otomatis per permintaan Bulk tunggal

Maksimal 512.

Slice per pendaftaran batch tunggal

Maksimal 20480, tanpa nama duplikat dalam permintaan.

page_size untuk API daftar Slice

1 hingga 10000.

Baris yang dikembalikan oleh CAT Slice

Maksimal 10000, tanpa paginasi.

Batasan API Collection dan Slice

Berikut adalah batas API umum saat menggunakan Collection dan Slice. Ini bukan daftar dukungan lengkap untuk semua fitur AI Engine Edition.

  • DLS/FLS tidak dapat digunakan dengan Collection. Role dengan batasan DLS/FLS dapat dibuat, tetapi pengguna dengan role tersebut akan menerima HTTP 403 saat mengakses Collection.

  • Collection tidak mendukung pencarian lintas klaster (CCS).

  • Point in Time (PIT) tidak dapat secara langsung menargetkan Collection.

  • _graph/explore dan _termvectors tidak dapat menargetkan Collection. _mtermvectors juga tidak dapat menyertakan item Collection.

  • Collection tidak mendukung _knn_search yang sudah usang. Gunakan knn dalam permintaan _search sebagai gantinya.

  • Mode recall klaster vektor hanya dapat secara otomatis memilih Slice kandidat saat permintaan menyediakan vektor kueri inline.

  • Pembaruan dengan skrip tidak didukung saat routing_field dikonfigurasi.

  • Reindex Collection tidak mendukung skrip. Saat Collection adalah tujuan, pipeline ingest eksplisit tidak didukung. Sumber remote tidak mendukung source._slice.

  • Salin Slice tidak mendukung operasi lintas-Collection, pengalihan trafik atomik, atau penyesuaian pekerja secara dinamis selama eksekusi.

  • Salin Slice tidak didukung saat pemetaan Slice sumber berisi bidang inferensi seperti semantic_text.

  • CAT Slice tidak mendukung paginasi, statistik ukuran penyimpanan per-Slice, atau sortir berdasarkan ukuran penyimpanan Slice.

Referensi cepat API

Berikut adalah ringkasan API publik 9.99.0 yang diperlukan untuk kasus penggunaan dalam panduan ini. Ini bukan daftar API Elasticsearch lengkap, juga tidak mencakup API yang dipelihara secara internal.

Tujuan

API

Buat Collection

PUT /_slice_collection/{collection}

Ambil Collection

GET /_slice_collection[/{collection}]

Perbarui Collection

POST /_slice_collection/{collection}/_update

Hapus Collection

DELETE /_slice_collection/{collection}

Daftarkan Slice tunggal

PUT /_slice_collection/{collection}/slices/{slice}

Daftarkan Slices secara batch

PUT /_slice_collection/{collection}/slices

Daftar Slice dengan paginasi

GET /_slice_collection/{collection}/slices

Hapus Slice

DELETE /_slice_collection/{collection}/slices/{slice}

Baca/tulis dokumen tunggal

/{collection}/_doc, /{collection}/_create, /{collection}/_update, /{collection}/_source; gunakan HEAD /{collection}/_doc/{id} untuk memeriksa apakah dokumen ada

Tulis dan baca batch

POST /_bulk, POST /{collection}/_bulk, POST /{collection}/_mget

Kueri dan hitung

POST /{collection}/_search, POST /{collection}/_count, POST /_msearch, POST /{collection}/_msearch

API kueri lain

POST /{collection}/_search/template, POST /{collection}/_async_search, GET /_async_search/{id}, DELETE /_async_search/{id}, POST /{collection}/_validate/query, GET /{collection}/_search_shards

Warm Slice cache

POST /{collection}/_warm_slice?_slice={slice}

Kueri tugas pemanasan

GET /_tasks/{taskId}

Perbarui atau hapus berdasarkan kueri

POST /{collection}/_update_by_query, POST /{collection}/_delete_by_query

Reindex

POST /_reindex

Perbarui pemetaan

PUT /{collection}/_mapping

Perbarui pengaturan dinamis

PUT /{collection}/_settings

Refresh eksplisit

POST /{collection}/_refresh

Kelola Alias Collection

POST /_aliases, GET /_alias[/{alias}]

Mulai Salin Slice

POST /_slice_collection/{collection}/slices/{source}/_copy/{target}

Kueri status Salin

GET /_slice_collection/{collection}/_copy/{copy_id}

Batalkan Salin

POST /_slice_collection/{collection}/_copy/{copy_id}/_cancel

CAT Collection

GET /_cat/slice_collection[/{name}]

CAT Pendukung

GET /_cat/slice_collection/{collection}/backings[/{backing}]

CAT Slice

GET /_cat/slice_collection/{collection}/slices[/{slice}]

Pengamatan kluster dan node

GET /_cluster/health, GET /_nodes/stats, GET /_tasks