All Products
Search
Document Center

Elasticsearch:Panduan pengguna indeks vektor FalconSeek

Last Updated:Dec 12, 2025

Dokumen ini menjelaskan penggunaan lanjutan FalconSeek untuk pengambilan vektor, termasuk pemilihan algoritma seperti HNSW dan RabitQGraph guna mempercepat kueri sesuai kebutuhan spesifik—mulai dari penyimpanan hemat biaya untuk data skala besar hingga optimasi performa ekstrem. Panduan ini mencakup pemilihan algoritma, pengaturan parameter, manajemen indeks, teknik penyetelan dinamis, serta contoh kode lengkap untuk membantu Anda mengimplementasikan pengambilan vektor yang efisien.

Informasi latar belakang

FalconSeek meningkatkan struktur indeks asli Alibaba Cloud ES dengan menambahkan indeks mesin vektor berbasis C++. Indeks vektor FalconSeek dikembangkan oleh Alibaba dan mendukung layanan utama dalam Alibaba Group, seperti Taobao, Tmall Search, Recommendation, dan Pailitao (search by image). Anda dapat memanfaatkan indeks vektor berkinerja tinggi yang terintegrasi dalam kernel FalconSeek untuk membangun aplikasi AI yang efisien, seperti pencarian berdasarkan gambar dan pencarian semantik.

Indeks vektor FalconSeek sepenuhnya kompatibel dengan fitur mesin vektor open source ES, seperti pencarian k-Nearest Neighbors (k-NN). Untuk menggunakan FalconSeek dalam indeks Alibaba Cloud ES, atur index_options.type menjadi havenask_native dalam konfigurasi indeks. Informasi lebih lanjut tentang pengaturan parameter lanjutan tersedia dalam penjelasan detail berikut.

Contoh penggunaan

Contoh dasar

Contoh berikut menunjukkan cara membuat indeks untuk menyimpan dan mengambil data vektor. Indeks tersebut diberi nama my_falcon_seek_index dan berisi bidang vektor bernama product_vector dengan dimensi 128 serta menggunakan algoritma HNSW.

  1. Buat indeks.

    PUT /my_falcon_seek_index
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
      },
      "mappings": {
        "properties": {
          "product_vector": {
            "type": "dense_vector",
            "dims": 128,
            "index": true,
            "similarity": "l2_norm",
            "index_options": {
              "type": "havenask_native",
              "knn_type": "HNSW",
              "m": 32,
              "ef_construction": 400
            }
          },
          "category": {
            "type": "keyword" 
          }
        }
      }
    }

    Parameter Inti

    • Tipe bidang dense_vector digunakan untuk menyimpan data vektor padat. Saat mendefinisikan bidang bertipe ini dalam mappings, Anda harus menentukan properti inti berikut:

      • dims: Dimensi vektor.

      • similarity: Fungsi untuk menghitung kesamaan antara vektor.

      • index_options: Konfigurasi detail untuk indeks vektor, termasuk tipe algoritma dan parameter terkait.

    • Fungsi similarity digunakan untuk mengukur tingkat kesamaan antara dua vektor. Pemilihan fungsi yang tepat sangat penting bagi performa recall.

      Fungsi

      Deskripsi

      Skenario

      l2_norm

      Jarak Euclidean. Fungsi ini menghitung jarak garis lurus antara dua vektor dalam ruang multidimensi. Jarak yang lebih kecil menunjukkan kesamaan yang lebih besar.

      Skema umum, seperti pengenalan gambar dan pengenalan wajah.

      cosine

      Kesamaan cosinus. Fungsi ini menghitung cosinus sudut antara arah dua vektor. Nilai yang lebih mendekati 1 menunjukkan kesamaan yang lebih besar.

      Analisis kesamaan semantik teks. Fungsi ini tidak dipengaruhi oleh panjang vektor.

      dot_product

      Produk dalam. Fungsi ini menghitung hasil kali titik dua vektor. Nilai yang lebih besar menunjukkan kesamaan yang lebih besar.

      Cocok untuk skenario yang perlu mempertimbangkan besarnya vektor, seperti sistem rekomendasi.

      max_inner_product

      Sama seperti dot_product, tetapi tidak memerlukan normalisasi vektor.

      Cocok untuk skenario yang perlu mempertimbangkan besarnya vektor, seperti sistem rekomendasi.

  2. Tulis data. Anda dapat menulis dokumen yang berisi vektor dan metadata, seperti kategori produk, ke dalam indeks. Panjang array product_vector harus sama dengan dimensi yang ditentukan oleh dims (128).

    POST /my_falcon_seek_index/_doc/1
    {
      "product_vector": [0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
        -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21,
        0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 
        0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30,
        -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23,
        0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
        0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
        -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18,
        0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05,
        0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
        -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22],
      "category": "clothes"
    }
    POST /my_falcon_seek_index/_doc/2
    {"product_vector":[0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
        -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21,
        0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 
        0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30,
        -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23,
        0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
        0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
        -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18,
        0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05,
        0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
        -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22],"category": "clothes"}
  3. Pengambilan vektor (k-NN). Anda dapat menemukan 5 dokumen paling mirip berdasarkan vektor kueri tertentu.

    GET /my_falcon_seek_index/_search
    {
      "knn": {
        "field": "product_vector",
        "query_vector": [0.12, -0.05, 0.01, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
        -0.03, 0.15, 0.22, -0.11, 0.09, 0.23, -0.07, 0.14, 0.26, -0.21,
        0.18, 0.29, -0.13, 0.06, 0.35, -0.18, 0.16, 0.23, -0.15, 0.12, 
        0.27, -0.22, 0.19, 0.32, -0.14, 0.87, 0.25, -0.18, 0.13, 0.30,
        -0.09, 0.17, 0.24, -0.16, 0.10, 0.64, -0.10, 0.20, 0.31, -0.23,
        0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
        0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
        -0.13, 0.07, 0.24, -0.22, 0.19, 0.52, -0.16, 0.10, 0.26, -0.18,
        0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.14, 0.29, -0.11, 0.05,
        0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
        -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.12],
        "k": 5,
        "num_candidates": 100
      }
    }

    Parameter Inti

    Kueri knn digunakan untuk melakukan pencarian k-NN.

    • field: Nama bidang dense_vector yang akan dikueri.

    • query_vector: Vektor yang digunakan untuk kueri. Dimensinya harus sesuai dengan definisi bidang.

    • k: Jumlah hasil paling mirip yang akan dikembalikan.

    • num_candidates: Ukuran set kandidat yang dicari secara internal oleh algoritma pada setiap shard. Nilai ini harus lebih besar dari k dan biasanya merupakan kelipatan dari k. Nilai yang lebih besar meningkatkan tingkat recall tetapi juga meningkatkan latensi kueri.

  4. Pengambilan terfilter. Anda dapat memfilter hasil selama pengambilan vektor untuk memenuhi kebutuhan bisnis yang lebih kompleks. Contoh berikut menemukan 5 dokumen paling mirip dalam kategori category "shoes".

    GET /my_falcon_seek_index/_search
    {
      "knn": {
        "field": "product_vector",
        "query_vector": [
          0.12, -0.05, 0.01, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
          -0.03, 0.15, 0.22, -0.11, 0.09, 0.23, -0.07, 0.14, 0.26, -0.21,
          0.18, 0.29, -0.13, 0.06, 0.35, -0.18, 0.16, 0.23, -0.15, 0.12,
          0.27, -0.22, 0.19, 0.32, -0.14, 0.87, 0.25, -0.18, 0.13, 0.30,
          -0.09, 0.17, 0.24, -0.16, 0.10, 0.64, -0.10, 0.20, 0.31, -0.23,
          0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
          0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
          -0.13, 0.07, 0.24, -0.22, 0.19, 0.52, -0.16, 0.10, 0.26, -0.18,
          0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.14, 0.29, -0.11, 0.05,
          0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
          -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
          0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
          0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.12
        ],
        "k": 5,
        "num_candidates": 100,
        "filter": {
          "term": {
            "category": "shoes"
          }
        }
      }
    }

Fitur lanjutan: Pengambilan terfilter dengan tags_filter

Parameter tags_filter menyediakan mekanisme pra-filtering yang dioptimalkan untuk algoritma HNSW dan QGraph. Fitur ini menawarkan performa lebih tinggi dibandingkan filter standar bool filter karena mengecualikan node yang tidak cocok sejak awal proses traversal graf.

  • Skema: Anda dapat menggunakan fitur ini ketika bidang filter memiliki jumlah nilai unik yang terbatas, seperti ID kategori atau merek, dan Anda memerlukan performa kueri tinggi.

  • Cara mengaktifkan fitur ini:

    1. Dalam index_options di mappings, deklarasikan bidang bertipe keyword yang akan digunakan untuk filtering dengan parameter tags.

      PUT /my_vector_index_with_tags
      {
        "mappings": {
          "properties": {
            "product_vector": {
              "type": "dense_vector",
              "dims": 128,
              "index_options": {
                "type": "havenask_native",
                "knn_type": "HNSW",
                "tags": ["category"] // Deklarasikan bidang category untuk tags_filter
              }
            },
            "category": {
              "type": "keyword" // Harus bertipe keyword
            }
          }
        }
      }
    2. Dalam kueri knn, gunakan parameter tags_filter dengan sintaks "field_name = value". Parameter ini mendukung logika | (OR) dan & (AND).

      GET /my_vector_index_with_tags/_search
      {
        "knn": {
          "field": "product_vector",
          "query_vector": [...],
          "k": 5,
          "tags_filter": "category = shoes | category = socks"
        }
      }
      

Pemilihan algoritma dan panduan performa

Pemilihan algoritma knn_type yang tepat sangat penting untuk mencapai keseimbangan optimal antara performa, biaya, dan presisi.

Perbandingan dan rekomendasi algoritma

Algoritma

Tingkat recall

Kecepatan kueri

Penggunaan memori

Skenario dan Rekomendasi

Batasan utama

HNSW

Tinggi

Cepat

Sedang

Pilihan pertama untuk tujuan umum.

Cocok untuk sebagian besar skenario, memberikan keseimbangan terbaik antara tingkat recall, performa, dan konsumsi resource. Berkinerja baik dengan dataset berukuran 100.000 hingga 10 juta dokumen.

Tidak ada batasan khusus.

RabitQGraph

Tinggi

Tercepat

Terendah

Untuk skenario performa ekstrem dan sensitif biaya.

Cocok untuk dataset yang memerlukan latensi kueri tingkat milidetik atau sangat sensitif terhadap biaya memori, terutama untuk dataset sangat besar (lebih dari 10 juta dokumen).

Hanya mendukung kesamaan l2_norm. Dimensi vektor harus merupakan kelipatan bulat positif dari 64.

QGraph

Tinggi

Cepat

Rendah

Untuk skenario skala besar yang sensitif biaya penyimpanan.

Mengurangi penggunaan memori dan penyimpanan secara signifikan melalui kuantisasi vektor. Cocok untuk dataset dengan lebih dari 5 juta dokumen.

Tidak ada batasan khusus.

QC

Sedang

Sedang

Rendah

Untuk skenario skala besar dengan keterbatasan memori. Pertimbangkan opsi ini ketika waktu build tidak sensitif, tetapi resource memori runtime sangat terbatas. Cocok untuk dataset dengan lebih dari 1 juta dokumen.

Waktu build lebih lama.

Linear

Tertinggi (100%)

Lambat

Rendah

Untuk dataset kecil atau skenario yang memerlukan presisi absolut.

Cocok untuk skenario di mana jumlah total dokumen kurang dari brute_force_threshold (default 1000) atau linear_build_threshold. Sistem beralih secara otomatis. Waktu kueri meningkat secara linear seiring volume data.

Hanya cocok untuk dataset kecil.

Jalur pemilihan berdasarkan skenario

  • Jika Anda baru memulai atau tidak yakin algoritma mana yang harus digunakan, pilih HNSW.

  • Jika volume data meningkat dan performa menurun:

    • Jika Anda memiliki memori yang cukup dan ingin mencapai Queries Per Second (QPS) lebih tinggi, migrasi dari HNSW ke RabitQGraph jika persyaratan untuk `RabitQGraph` terpenuhi.

    • Jika biaya memori atau penyimpanan menjadi perhatian, migrasi dari HNSW ke QGraph dan konfigurasikan quantizer.

  • Untuk dataset sangat besar dengan lebih dari 10 juta dokumen:

    • Jika Anda memiliki persyaratan latensi yang sangat tinggi, pilih RabitQGraph.

    • Jika Anda sensitif terhadap biaya dan memiliki persyaratan latensi yang sedikit lebih rendah, pilih QGraph.

Manajemen indeks (Mappings)

Saat membuat indeks, semua konfigurasi terkait vektor diatur dalam blok index_options di mappings.

PUT /<your_index_name>
{
  "mappings": {
    "properties": {
      "<your_vector_field>": {
        "type": "dense_vector",
        "dims": 768,
        "similarity": "l2_norm",
        "index_options": {
          // --- Parameter umum ---
          "type": "havenask_native",
          "knn_type": "HNSW",
          // --- Parameter pembangunan algoritma ---
          "m": 32,
          "ef_construction": 400,
          // --- Parameter lanjutan ---
          "thread_count": 8
        }
      }
    }
  }
}

Parameter umum

Parameter

Deskripsi

Tipe

Wajib

Default

type

Menentukan mesin indeks vektor FalconSeek. Harus diatur ke "havenask_native".

String

Ya

Tidak ada

knn_type

Menentukan algoritma indeks vektor. Opsi yang tersedia adalah "HNSW", "RabitQGraph", "QGraph", "QC", dan "Linear".

String

Tidak

"HNSW"

Parameter pembangunan algoritma

Parameter berikut berlaku selama pembangunan indeks dan menentukan struktur serta kualitas indeks.

Parameter umum untuk HNSW dan QGraph

Parameter

Deskripsi

Tipe

Default

Nilai yang direkomendasikan dan dampaknya

m

Jumlah maksimum tetangga untuk setiap node dalam graf.

Integer

16

Dampak: Mempengaruhi langsung tingkat recall dan penggunaan memori.
Rekomendasi: 16 (memori rendah), 32 (seimbang), 64-128 (tingkat recall tinggi). Nilai yang lebih besar meningkatkan tingkat recall, tetapi juga meningkatkan penggunaan memori dan waktu build. Rentang nilai: 4–128.

ef_construction

Lebar pencarian set kandidat selama pembangunan graf.

Integer

200

Dampak: Menentukan kualitas dan waktu pembangunan indeks.
Rekomendasi: 200 (build cepat), 400-500 (seimbang), 800+ (build berkualitas tinggi). Nilai yang lebih besar menghasilkan kualitas indeks lebih tinggi (dan akhirnya tingkat recall lebih tinggi), tetapi waktu build lebih lama. Rentang nilai: 10–2000.

Parameter khusus QGraph

Parameter

Deskripsi

Tipe

Default

Nilai yang direkomendasikan dan dampaknya

quantizer

Metode kuantisasi vektor, digunakan untuk mengompresi vektor guna mengurangi penggunaan memori dan penyimpanan.

String

Tidak ada

Dampak: Mengurangi penggunaan resource secara signifikan, tetapi mungkin menyebabkan sedikit kehilangan presisi.
Rekomendasi: "int8" (direkomendasikan, kompresi 8x), "int4" (rasio kompresi lebih tinggi), "fp16" (presisi tinggi, kompresi 2x), "2bit" (kompresi ekstrem).

Parameter lanjutan

Parameter

Deskripsi

Tipe

Default

Nilai yang direkomendasikan dan dampaknya

thread_count

Jumlah thread paralel yang digunakan selama pembangunan indeks.

Integer

1

Dampak: Mempercepat proses build.
Rekomendasi: Atur ke 0 untuk secara otomatis menggunakan semua core CPU mesin, atau tentukan nilai (1–32) berdasarkan resource Anda.

tags

Mendeklarasikan daftar bidang untuk filtering berperforma-tinggi dengan tags_filter.

Array

[]

Dampak: Mengaktifkan pra-filtering berperforma-tinggi.
Rekomendasi: Tambahkan bidang keyword yang sering difilter dengan kardinalitas rendah ke dalam daftar, seperti ["category", "brand_id"].

linear_build_threshold

Jika jumlah total dokumen dalam indeks berada di bawah ambang batas ini, sistem secara otomatis beralih ke pencarian Linear (brute-force) untuk mengoptimalkan konsumsi resource dan efisiensi kueri untuk dataset kecil.

Integer

0

Dampak: Menghindari pembangunan struktur indeks kompleks untuk dataset kecil.
Rekomendasi: Untuk indeks yang mungkin hanya memiliki sedikit dokumen, Anda dapat mengatur nilai ini ke 1000 atau 5000.

index_params

Antarmuka konfigurasi untuk parameter mesin dasar, digunakan untuk penyetelan lanjutan.

Object

{}

Dampak: Memungkinkan kontrol detail halus atas setiap aspek proses build dan kueri.
Penting: Parameter dalam index_params akan menimpa parameter tingkat atas dengan nama yang sama (seperti m dan ef_construction). Ini adalah antarmuka untuk pengguna lanjutan. Pengguna biasa sebaiknya menggunakan parameter tingkat atas.

Parameter index_params menyediakan akses langsung ke parameter dasar proxima.* dan param.*. Sebagai contoh, parameter tingkat atas m berkorespondensi dengan parameter dasar proxima.hnsw.builder.max_neighbor_count. Gunakan konfigurasi ini hanya jika perlu menyesuaikan detail yang tidak tersedia melalui parameter tingkat atas.

json

"index_options": {  "knn_type": "HNSW",  "m": 32, // Akan ditimpa oleh index_params di bawah  "index_params": {    "proxima.hnsw.builder.max_neighbor_count": 48 // Nilai efektif akhir adalah 48  }}

Body kueri knn

Parameter

Deskripsi

Tipe

Wajib

field

Nama bidang dense_vector tempat pencarian k-NN dilakukan.

String

Ya

query_vector

Vektor yang digunakan untuk kueri.

Array

Ya

k

Jumlah hasil paling mirip yang akan dikembalikan.

Integer

Ya

num_candidates

Ukuran set kandidat pencarian pada setiap shard. Nilai yang lebih besar meningkatkan tingkat recall tetapi memperlambat kueri.

Integer

Tidak (Direkomendasikan)

tags_filter

(Opsional) Pra-filtering berperforma-tinggi untuk HNSW dan QGraph.

String

Tidak

search_params

(Opsional) Menyesuaikan beberapa parameter pencarian secara dinamis saat kueri untuk penyetelan sementara.

Object

Tidak

Deskripsi parameter

HNSW

Parameter untuk algoritma Hierarchical Navigable Small Worlds (HNSW) menggunakan namespace proxima.hnsw. dan dapat diatur menggunakan index_params.

HNSW Builder

Nama parameter

Tipe

Default

Deskripsi

proxima.hnsw.builder.max_neighbor_count

uint32

100

Jumlah tetangga dalam graf. Nilai yang lebih besar membuat graf lebih akurat tetapi meningkatkan overhead komputasi dan penyimpanan. Umumnya tidak boleh melebihi dimensi fitur. Maksimum adalah 65535.

proxima.hnsw.builder.efconstruction

uint32

500

Mengontrol presisi pembangunan graf. Nilai yang lebih besar menghasilkan graf yang lebih akurat tetapi memerlukan waktu build lebih lama.

proxima.hnsw.builder.thread_count

uint32

0

Jumlah thread yang digunakan selama pembangunan. Jika diatur ke 0, akan menggunakan jumlah core CPU.

proxima.hnsw.builder.memory_quota

uint64

0

Membatasi memori maksimum untuk pembangunan. Pembangunan berbasis disk saat ini tidak didukung. Jika nilai ini terlampaui, proses build akan gagal.

proxima.hnsw.builder.scaling_factor

uint32

50

Rasio node antar lapisan graf. Umumnya tidak perlu dimodifikasi. Rentang nilai: [5,1000].

proxima.hnsw.builder.neighbor_prune_ratio

float

0.5

Mengontrol jumlah tetangga tempat pemangkasan edge dimulai dalam tabel tetangga. Umumnya tidak perlu dimodifikasi.

proxima.hnsw.builder.upper_neighbor_ratio

float

0.5

Rasio tetangga di lapisan atas graf relatif terhadap graf lapisan 0. Umumnya tidak perlu dimodifikasi.

proxima.hnsw.builder.enable_adsampling

bool

false

Nonaktif secara default. Saat ini hanya mendukung perhitungan jarak Euclidean untuk dataset fp32. Tidak direkomendasikan untuk dimensi di bawah 256.

proxima.hnsw.builder.slack_pruning_factor

float

1.0

Default adalah 1.0. Direkomendasikan antara [1.1, 1.2]. Untuk gist960 dan sift128, disarankan 1.1.

HNSW Searcher

Nama parameter

Tipe

Default

Deskripsi

proxima.hnsw.searcher.ef

uint32

500

Digunakan untuk mengontrol presisi pengambilan. Nilai yang lebih besar memindai lebih banyak dokumen dan meningkatkan tingkat recall.

proxima.hnsw.searcher.max_scan_ratio

float

0.1

Mengontrol proporsi maksimum dokumen yang dipindai selama pengambilan. Jika nilai ef konvergen lebih awal, rasio ini mungkin tidak tercapai.

proxima.hnsw.searcher.neighbors_in_memory_enable

bool

false

Jika diaktifkan, menyimpan tabel tetangga dalam memori, yang meningkatkan performa tetapi mengonsumsi lebih banyak memori.

proxima.hnsw.searcher.check_crc_enable

bool

false

Menentukan apakah akan melakukan pemeriksaan redundansi siklik (CRC) pada indeks. Mengaktifkan ini akan meningkatkan waktu pemuatan.

proxima.hnsw.searcher.visit_bloomfilter_enable

bool

false

Menggunakan bloom filter sebagai kontainer untuk deduplikasi node graf yang telah dikunjungi. Pendekatan ini mengoptimalkan penggunaan memori, meskipun sedikit menurunkan performa.

proxima.hnsw.searcher.visit_bloomfilter_negative_prob

float

0.001

Akurasi bloom filter. Nilai yang lebih kecil lebih akurat tetapi menggunakan lebih banyak memori.

proxima.hnsw.searcher.brute_force_threshold

int

1000

Jika jumlah total dokumen kurang dari nilai ini, pencarian linear dilakukan.

Contoh konfigurasi HNSW

// Konfigurasi HNSW dasar
PUT /hnsw_basic
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 768,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "HNSW"
        }
      }
    }
  }
}

// Konfigurasi HNSW berkinerja-tinggi
PUT /hnsw_performance
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 1024,
        "index": true,
        "similarity": "dot_product",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "HNSW",
          "m": 48,
          "ef_construction": 500,
          "thread_count": 8,
          "linear_build_threshold": 1000,
          "is_embedding_saved": true,
          "embedding_load_strategy": "ANN_INDEX_FILE",
          "index_load_strategy": "MEM"
        }
      }
    }
  }
}

RabitQGraph

RabitQGraph Builder

Nama parameter

Tipe

Default

Deskripsi

param.rabitQGraph.builder.neighbor_cnt

uint32

128

Jumlah tetangga untuk setiap node, memengaruhi konektivitas graf dan presisi pencarian.

param.rabitQGraph.builder.ef_construction

uint32

512

Parameter EF untuk pembangunan, yang mengontrol jumlah node kandidat selama konstruksi.

param.rabitQGraph.builder.prune_ratio

float

0.5

Rasio pemangkasan tetangga, digunakan untuk mengoptimalkan struktur graf.

param.rabitQGraph.builder.cluster_count

uint32

64

Jumlah centroid kluster, digunakan untuk kuantisasi vektor.

param.rabitQGraph.builder.quantized_bit_count

uint32

1

Jumlah bit untuk kuantisasi. Hanya dapat diatur ke 1, 4, 5, 8, atau 9.

param.rabitQGraph.builder.slack_prune_factor

float

1.0

Faktor pemangkasan slack, digunakan untuk mengontrol kebijakan pemangkasan.

param.rabitQGraph.builder.repair_connectivity

bool

true

Menentukan apakah akan memperbaiki konektivitas graf.

param.rabitQGraph.builder.thread_count

uint32

0

Jumlah thread yang digunakan selama pembangunan. Jika diatur ke 0, akan menggunakan jumlah core CPU.

param.rabitQGraph.builder.ckpt_count

uint32

0

Jumlah checkpoint, digunakan untuk build bertahap.

param.rabitQGraph.builder.ckpt_threshold

uint32

2000000

Ambang batas checkpoint.

RabitQGraph Searcher

Nama parameter

Tipe

Default

Deskripsi

param.rabitQGraph.searcher.ef

uint32

250

Parameter EF untuk pencarian, yang memengaruhi presisi dan performa pencarian.

param.rabitQGraph.searcher.max_scan_ratio

double

0.05

Rasio pemindaian maksimum, yang membatasi persentase node yang dicari.

param.rabitQGraph.searcher.check_crc_enable

bool

false

Menentukan apakah akan mengaktifkan pemeriksaan CRC.

param.rabitQGraph.searcher.thread_count

uint32

1

Jumlah thread yang digunakan untuk pencarian.

param.rabitQGraph.searcher.thread_safe_filter

bool

false

Menentukan apakah akan mengaktifkan filtering aman-thread.

Contoh konfigurasi RabitQGraph

// Konfigurasi berkinerja-tinggi
{
  "index_params": {
    "param.rabitQGraph.builder.neighbor_cnt": 256,
    "param.rabitQGraph.builder.ef_construction": 512,
    "param.rabitQGraph.builder.quantized_bit_count": 8,
    "param.rabitQGraph.builder.cluster_count": 128,
    "param.rabitQGraph.builder.thread_count": 8,
    "param.rabitQGraph.searcher.ef": 300,
    "param.rabitQGraph.searcher.max_scan_ratio": 0.1
  }
}

// Konfigurasi hemat memori
{
  "index_params": {
    "param.rabitQGraph.builder.neighbor_cnt": 64,
    "param.rabitQGraph.builder.ef_construction": 200,
    "param.rabitQGraph.builder.quantized_bit_count": 1,
    "param.rabitQGraph.builder.cluster_count": 32,
    "param.rabitQGraph.searcher.ef": 150,
    "param.rabitQGraph.searcher.max_scan_ratio": 0.03
  }
}

// Konfigurasi seimbang
{
  "index_params": {
    "param.rabitQGraph.builder.neighbor_cnt": 128,
    "param.rabitQGraph.builder.ef_construction": 400,
    "param.rabitQGraph.builder.quantized_bit_count": 4,
    "param.rabitQGraph.builder.cluster_count": 64,
    "param.rabitQGraph.searcher.ef": 250
  }
}

Linear

Algoritma Linear melakukan pencarian brute-force linear. Parameternya relatif sederhana dan menggunakan namespace proxima.linear..

Linear Builder/Searcher

Nama parameter

Tipe

Default

Deskripsi

proxima.linear.builder.column_major_order

string

false

Menentukan apakah akan menggunakan urutan row-major (false) atau column-major (true) untuk fitur selama pembangunan.

proxima.linear.searcher.read_block_size

uint32

1048576

Ukuran blok yang dibaca ke memori sekaligus selama fase pencarian. Nilai yang direkomendasikan adalah 1 MB.

Contoh konfigurasi Linear

// Konfigurasi dasar
{
  "index_params": {
    "proxima.linear.builder.column_major_order": "false",
    "proxima.linear.searcher.read_block_size": 1048576
  }
}

// Konfigurasi memori besar
{
  "index_params": {
    "proxima.linear.builder.column_major_order": "true",
    "proxima.linear.searcher.read_block_size": 2097152
  }
}

QC

Algoritma QC (Quantization Clustering) menggunakan indeks pengelompokan kuantisasi. Parameternya menggunakan namespace proxima.qc..

QC Builder

Nama parameter

Tipe

Default

Deskripsi

proxima.qc.builder.train_sample_count

uint32

0

Menentukan jumlah data pelatihan. Jika 0, semua data digunakan.

proxima.qc.builder.thread_count

uint32

0

Jumlah thread yang digunakan selama pembangunan. Jika diatur ke 0, akan menggunakan jumlah core CPU.

proxima.qc.builder.centroid_count

string

-

Parameter centroid kluster. Mendukung pengelompokan hirarkis. Pisahkan lapisan dengan "*".

proxima.qc.builder.cluster_class

string

OptKmeansCluster

Menentukan metode pengelompokan.

proxima.qc.builder.cluster_auto_tuning

bool

false

Menentukan apakah akan mengaktifkan penyetelan otomatis jumlah centroid.

proxima.qc.builder.optimizer_class

string

HcBuilder

Pengoptimal untuk bagian centroid, digunakan untuk meningkatkan presisi selama klasifikasi.

proxima.qc.builder.optimizer_params

IndexParams

-

Parameter build dan pengambilan yang berkorespondensi dengan metode optimasi.

proxima.qc.builder.converter_class

string

-

Jika Measure adalah InnerProduct, transformasi Mips dilakukan secara otomatis.

proxima.qc.builder.converter_params

IndexParams

-

Parameter inisialisasi untuk converter_class.

proxima.qc.builder.quantizer_class

string

-

Mengonfigurasi kuantisator. Opsi termasuk Int8QuantizerConverter, Int4QuantizerConverter, dll.

proxima.qc.builder.quantizer_params

IndexParams

-

Parameter terkait kuantisator.

proxima.qc.builder.quantize_by_centroid

bool

false

Saat menggunakan quantizer_class, menentukan apakah akan mengkuantisasi berdasarkan centroid.

proxima.qc.builder.store_original_features

bool

false

Menentukan apakah akan menyimpan fitur asli.

QC Searcher

Nama parameter

Tipe

Default

Deskripsi

proxima.qc.searcher.scan_ratio

float

0.01

Digunakan untuk menghitung max_scan_num: jumlah total dokumen * scan_ratio.

proxima.qc.searcher.optimizer_params

IndexParams

-

Menentukan parameter pengambilan online yang berkorespondensi dengan pengoptimal yang digunakan selama pembangunan.

proxima.qc.searcher.brute_force_threshold

int

1000

Jika jumlah total dokumen kurang dari nilai ini, pencarian linear dilakukan.

Contoh konfigurasi QC

// Konfigurasi dasar
{
  "index_params": {
    "proxima.qc.builder.thread_count": 4,
    "proxima.qc.builder.centroid_count": "1000",
    "proxima.qc.builder.cluster_class": "OptKmeansCluster",
    "proxima.qc.searcher.scan_ratio": 0.02
  }
}

// Konfigurasi pengelompokan hirarkis
{
  "index_params": {
    "proxima.qc.builder.thread_count": 8,
    "proxima.qc.builder.centroid_count": "100*100",
    "proxima.qc.builder.optimizer_class": "HnswBuilder",
    "proxima.qc.builder.quantizer_class": "Int8QuantizerConverter",
    "proxima.qc.searcher.scan_ratio": 0.01
  }
}

// Konfigurasi presisi tinggi
{
  "index_params": {
    "proxima.qc.builder.thread_count": 12,
    "proxima.qc.builder.centroid_count": "2000",
    "proxima.qc.builder.train_sample_count": 100000,
    "proxima.qc.builder.store_original_features": true,
    "proxima.qc.searcher.scan_ratio": 0.05
  }
}

QGraph

Algoritma QGraph (Quantized Graph) menggunakan indeks graf terkuantisasi. Algoritma ini mewarisi sebagian besar parameter dari HNSW dan menambahkan parameter terkait kuantisasi.

QGraph Builder

QGraph mewarisi semua parameter HNSW Builder dan menambahkan yang berikut:

Nama parameter

Tipe

Default

Deskripsi

proxima.qgraph.builder.quantizer_class

string

-

Mengonfigurasi kuantisator. Opsi termasuk Int8QuantizerConverter, Int4QuantizerConverter, HalfFloatConverter, dan DoubleBitConverter.

proxima.qgraph.builder.quantizer_params

IndexParams

-

Mengonfigurasi parameter terkait kuantisator.

Semua parameter proxima.hnsw.builder.* juga berlaku untuk QGraph.

QGraph Searcher

QGraph mewarisi semua parameter HNSW Searcher.

Contoh konfigurasi QGraph

// Konfigurasi kuantisasi Int8
{
  "index_params": {
    "proxima.hnsw.builder.max_neighbor_count": 32,
    "proxima.hnsw.builder.efconstruction": 400,
    "proxima.hnsw.builder.thread_count": 4,
    "proxima.qgraph.builder.quantizer_class": "Int8QuantizerConverter",
    "proxima.qgraph.builder.quantizer_params": {},
    "proxima.hnsw.searcher.ef": 300
  }
}

// Konfigurasi kuantisasi Int4 (lebih hemat memori)
{
  "index_params": {
    "proxima.hnsw.builder.max_neighbor_count": 48,
    "proxima.hnsw.builder.efconstruction": 500,
    "proxima.hnsw.builder.thread_count": 6,
    "proxima.qgraph.builder.quantizer_class": "Int4QuantizerConverter",
    "proxima.qgraph.builder.quantizer_params": {},
    "proxima.hnsw.searcher.ef": 400,
    "proxima.hnsw.searcher.max_scan_ratio": 0.1
  }
}

// Konfigurasi kuantisasi HalfFloat (presisi tinggi)
{
  "index_params": {
    "proxima.hnsw.builder.max_neighbor_count": 64,
    "proxima.hnsw.builder.efconstruction": 600,
    "proxima.hnsw.builder.thread_count": 8,
    "proxima.qgraph.builder.quantizer_class": "HalfFloatConverter",
    "proxima.qgraph.builder.quantizer_params": {},
    "proxima.hnsw.searcher.ef": 500
  }
}

Penyesuaian parameter dinamis dengan search_params

Anda dapat menyesuaikan sementara parameter pencarian tertentu tanpa membangun ulang indeks untuk menyeimbangkan tingkat recall dan latensi kueri dalam skenario berbeda.

Sebagai contoh, untuk kueri online normal, gunakan nilai ef default atau lebih rendah guna memastikan latensi rendah. Untuk analitik batch atau tugas yang memerlukan presisi tinggi, tingkatkan sementara nilai ef menggunakan search_params untuk mendapatkan tingkat recall lebih tinggi.

HNSW

{
  "search_params": {
    "proxima.hnsw.searcher.ef": "400",
    "proxima.hnsw.searcher.max_scan_ratio": "0.15"
  }
}

QGraph

{
  "search_params": {
    "proxima.hnsw.searcher.ef": "400",
    "proxima.hnsw.searcher.max_scan_ratio": "0.15"
  }
}

QC

{
  "search_params": {
    "proxima.qc.searcher.scan_ratio": "0.02"
  }
}

RabitQGraph

{
  "search_params": {
    "param.rabitQGraph.searcher.ef": "300",
    "param.rabitQGraph.searcher.max_scan_ratio": "0.08"
  }
}

Contoh konfigurasi search_params

// Menyesuaikan dinamis presisi dan performa untuk HNSW
GET vector_index/_search
{
  "knn": {
    "field": "vector",
    "query_vector": [0.1, 0.2, 0.3],
    "k": 10,
    "num_candidates": 100,
    "search_params": {
      "proxima.hnsw.searcher.ef": "500",
      "proxima.hnsw.searcher.max_scan_ratio": "0.2"
    }
  }
}

// Menyesuaikan dinamis rasio pemindaian untuk QC
GET vector_index/_search
{
  "knn": {
    "field": "vector",
    "query_vector": [0.1, 0.2, 0.3],
    "k": 10,
    "num_candidates": 100,
    "search_params": {
      "proxima.qc.searcher.scan_ratio": "0.05"
    }
  }
}

// Menyesuaikan dinamis presisi pencarian untuk RabitQGraph
GET vector_index/_search
{
  "knn": {
    "field": "vector",
    "query_vector": [0.1, 0.2, 0.3],
    "k": 10,
    "num_candidates": 100,
    "search_params": {
      "param.rabitQGraph.searcher.ef": "400",
      "param.rabitQGraph.searcher.max_scan_ratio": "0.1"
    }
  }
}

linear_build_threshold

Parameter ini adalah integer opsional dengan nilai default 0. Jika jumlah dokumen kurang dari ambang batas ini, pencarian linear dilakukan alih-alih membangun indeks kompleks.

// Nonaktifkan ambang batas linear
{
  "linear_build_threshold": 0
}

// Gunakan pencarian linear untuk dataset kecil
{
  "linear_build_threshold": 1000
}

// Ambang batas lebih besar, cocok untuk lingkungan staging
{
  "linear_build_threshold": 5000
}

Lampiran: Contoh lengkap

HNSW

// Konfigurasi HNSW dasar
PUT /hnsw_basic
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 768,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "HNSW"
        }
      }
    }
  }
}

// Konfigurasi HNSW berkinerja-tinggi
PUT /hnsw_performance
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 1024,
        "index": true,
        "similarity": "dot_product",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "HNSW",
          "m": 48,
          "ef_construction": 500,
          "thread_count": 8,
          "linear_build_threshold": 1000,
          "is_embedding_saved": true,
          "embedding_load_strategy": "ANN_INDEX_FILE",
          "index_load_strategy": "MEM"
        }
      }
    }
  }
}

Linear

// Konfigurasi Linear dasar
PUT /linear_basic
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 384,
        "index": true,
        "similarity": "l2_norm",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "Linear"
        }
      }
    }
  }
}

QC

// Konfigurasi QC dasar
PUT /qc_basic
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 768,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "QC"
        }
      }
    }
  }
}

// Konfigurasi QC kustom
PUT /qc_custom
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 1024,
        "index": true,
        "similarity": "dot_product",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "QC",
          "thread_count": 8,
          "linear_build_threshold": 5000,
          "index_params": "{\"proxima.qc.builder.thread_count\": 8, \"proxima.qc.builder.centroid_count\": \"2000\"}"
        }
      }
    }
  }
}

QGraph

// Konfigurasi QGraph dasar
PUT /qgraph_basic
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 768,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "QGraph",
          "quantizer": "int8"
        }
      }
    }
  }
}

// Konfigurasi QGraph presisi tinggi
PUT /qgraph_high_precision
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 1536,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "QGraph",
          "m": 40,
          "ef_construction": 600,
          "thread_count": 8,
          "quantizer": "fp16",
          "is_embedding_saved": true,
          "index_load_strategy": "MEM"
        }
      }
    }
  }
}

// Konfigurasi QGraph hemat memori
PUT /qgraph_memory_optimized
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 1024,
        "index": true,
        "similarity": "l2_norm",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "QGraph",
          "m": 24,
          "ef_construction": 300,
          "thread_count": 6,
          "quantizer": "int4",
          "is_embedding_saved": false,
          "index_load_strategy": "BUFFER"
        }
      }
    }
  }
}

RabitQGraph

// Konfigurasi RabitQGraph dasar (hanya mendukung kesamaan l2_norm)
PUT /rabitqgraph_basic
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 64,
        "index": true,
        "similarity": "l2_norm",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "RabitQGraph"
        }
      }
    }
  }
}

// Konfigurasi RabitQGraph berkinerja-tinggi - menggunakan index_params dalam format Map
PUT /rabitqgraph_performance
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 128,
        "index": true,
        "similarity": "l2_norm",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "RabitQGraph",
          "thread_count": 8,
          "index_params": {
            "param.rabitQGraph.builder.neighbor_cnt": 256,
            "param.rabitQGraph.builder.ef_construction": 512,
            "param.rabitQGraph.builder.quantized_bit_count": 4,
            "param.rabitQGraph.builder.cluster_count": 128,
            "param.rabitQGraph.searcher.ef": 300
          }
        }
      }
    }
  }
}

// Konfigurasi RabitQGraph hemat memori
PUT /rabitqgraph_memory_optimized
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 192,
        "index": true,
        "similarity": "l2_norm",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "RabitQGraph",
          "thread_count": 4,
          "linear_build_threshold": 1000,
          "index_params": {
            "param.rabitQGraph.builder.neighbor_cnt": 64,
            "param.rabitQGraph.builder.ef_construction": 200,
            "param.rabitQGraph.builder.quantized_bit_count": 1,
            "param.rabitQGraph.builder.cluster_count": 32,
            "param.rabitQGraph.searcher.ef": 150,
            "param.rabitQGraph.searcher.max_scan_ratio": 0.05
          }
        }
      }
    }
  }
}

// Konfigurasi RabitQGraph dengan filtering tag
PUT /rabitqgraph_with_tags
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 256,
        "index": true,
        "similarity": "l2_norm",
        "index_options": {
          "type": "havenask_native",
          "knn_type": "RabitQGraph",
          "tags": ["category", "region"],
          "index_params": {
            "param.rabitQGraph.builder.neighbor_cnt": 128,
            "param.rabitQGraph.builder.ef_construction": 400,
            "param.rabitQGraph.builder.quantized_bit_count": 8,
            "param.rabitQGraph.searcher.ef": 250
          }
        }
      },
      "category": {
        "type": "keyword"
      },
      "region": {
        "type": "keyword"
      }
    }
  }
}