Ikhtisar
Mekanisme pengambilan berbasis vektor mengekspresikan data komoditas dan konten dalam bentuk vektor serta membangun pustaka indeks vektor. Anda dapat menentukan satu atau lebih vektor pengguna atau vektor komoditas di pustaka indeks vektor untuk mengambil daftar top-k komoditas atau konten berdasarkan jarak vektor.
Contoh kode untuk mengonfigurasi indeks vektor
Konfigurasikan indeks vektor tanpa kategori
{
"table_name": "test_vector",
"summarys": {
"summary_fields": [
"id",
"vector_field"
]
},
"indexs": [
{
"index_name": "pk",
"index_type": "PRIMARYKEY64",
"index_fields": "id",
"has_primary_key_attribute": true,
"is_primary_key_sorted": false
},
{
"index_name": "embedding",
"index_type": "CUSTOMIZED",
"index_fields": [
{
"boost": 1,
"field_name": "id"
},
{
"boost": 1,
"field_name": "vector_field"
}
],
"indexer": "aitheta2_indexer",
"parameters": {
"enable_rt_build": "false",
"min_scan_doc_cnt": "20000",
"vector_index_type": "Qc",
"major_order": "col",
"builder_name": "QcBuilder",
"distance_type": "SquaredEuclidean",
"embedding_delimiter": ",",
"enable_recall_report": "false",
"is_embedding_saved": "false",
"linear_build_threshold": "5000",
"dimension": "128",
"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
"searcher_name": "QcSearcher",
"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
}
}
],
"attributes": [
"id",
"vector_field"
],
"fields": [
{
"field_name": "id",
"field_type": "INTEGER"
},
{
"user_defined_param": {
"multi_value_sep": ","
},
"field_name": "vector_field",
"field_type": "FLOAT",
"multi_value": true
}
]
}Konfigurasikan indeks vektor dengan kategori
{
"table_name": "test_vector",
"summarys": {
"summary_fields": [
"id",
"vector_field",
"category_id"
]
},
"indexs": [
{
"index_name": "pk",
"index_type": "PRIMARYKEY64",
"index_fields": "id",
"has_primary_key_attribute": true,
"is_primary_key_sorted": false
},
{
"index_name": "embedding",
"index_type": "CUSTOMIZED",
"index_fields": [
{
"boost": 1,
"field_name": "id"
},
{
"field_name": "category_id",
"boost": 1
},
{
"boost": 1,
"field_name": "vector_field"
}
],
"indexer": "aitheta2_indexer",
"parameters": {
"enable_rt_build": "false",
"min_scan_doc_cnt": "20000",
"vector_index_type": "Qc",
"major_order": "col",
"builder_name": "QcBuilder",
"distance_type": "SquaredEuclidean",
"embedding_delimiter": ",",
"enable_recall_report": "false",
"is_embedding_saved": "false",
"linear_build_threshold": "5000",
"dimension": "128",
"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
"searcher_name": "QcSearcher",
"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
}
}
],
"attributes": [
"id",
"vector_field",
"category_id"
],
"fields": [
{
"field_name": "id",
"field_type": "INTEGER"
},
{
"user_defined_param": {
"multi_value_sep": ","
},
"field_name": "vector_field",
"field_type": "FLOAT",
"multi_value": true
},
{
"field_name": "category_id",
"field_type": "INTEGER"
}
]
}Kategori diperkenalkan untuk memungkinkan pencarian vektor berdasarkan kategori. Sebagai contoh, sebuah gambar termasuk dalam kategori yang berbeda. Jika Anda tidak membangun indeks vektor dengan kategori dan hanya menyaring vektor yang diambil, mungkin tidak ada hasil yang dikembalikan.
Jika Anda mengonfigurasi indeks vektor sebagai administrator, karakter escape dalam nilai parameter build_index_params dan search_index_params harus dihapus.
Deskripsi parameter
field_name: Bidang yang digunakan untuk membangun indeks vektor. Bidang tersebut harus bertipe data RAW. Anda harus menentukan setidaknya dua bidang untuk parameter ini. Satu bidang harus berupa kunci utama tipe data INTEGER atau nilai hash dari kunci utama. Bidang lainnya harus mencakup vektor. Jika Anda perlu membangun indeks vektor berdasarkan kategori, Anda dapat menambahkan bidang kategori. Tipe bidang adalah RAW dan nilai bidang adalah tipe data INTEGER. Urutan bidang dalam parameter indeks harus dikonfigurasi dengan cara yang sama seperti dalam parameter bidang. Jika bidang kategori ada, urutannya harus bidang kunci utama, bidang kategori, dan bidang vektor.
index_name: Nama indeks vektor.
index_type: Jenis indeks vektor. Tetapkan nilainya ke CUSTOMIZED.
indexer: Plugin yang ingin Anda gunakan untuk membangun indeks vektor. Tetapkan nilainya ke aitheta2_indexer.
parameters: Parameter yang digunakan untuk mengonfigurasi pembuat dan pencari untuk indeks vektor.
dimension: Jumlah dimensi.
embedding_delimiter: Pemisah vektor. Pemisah default adalah koma (,).
distance_type: Jenis jarak. Nilai valid:
InnerProduct: Menghitung produk dalam.
SquaredEuclidean: Menghitung jarak Euclidean kuadrat. Tentukan SquaredEuclidean untuk data yang dinormalisasi.
major_order: Metode yang ingin Anda gunakan untuk menyimpan data Anda. Nilai valid:
col: Menggunakan penyimpanan kolom untuk data. Jika Anda menetapkan parameter major_order ke col, Anda harus menetapkan parameter dimension ke 2 pangkat n, di mana n harus berupa bilangan bulat positif. Jika Anda menggunakan nilai col, kinerja sistem lebih baik daripada saat Anda menggunakan nilai row.
row: Menggunakan penyimpanan baris untuk data. Ini adalah nilai default.
builder_name: Jenis pembuat yang ingin Anda gunakan untuk indeks vektor. Kami merekomendasikan Anda menetapkan parameter ini ke salah satu nilai berikut. Untuk informasi tentang nilai parameter lainnya, hubungi dukungan teknis.
QcBuilder
LinearBuilder: Membangun indeks secara berurutan. Kami merekomendasikan Anda menetapkan parameter builder_name ke LinearBuilder jika jumlah dokumen kurang dari 10.000.
searcher_name: Jenis pencari yang ingin Anda gunakan untuk indeks vektor. Nilai parameter searcher_name harus sesuai dengan nilai parameter builder_name. Jika Anda ingin menggunakan sumber daya GPU, hubungi dukungan teknis.
QcSearcher: Menjalankan pencarian menggunakan CPU. Tetapkan parameter searcher_name ke QcSearcher jika parameter builder_name diatur ke QcBuilder.
LinearSearcher: Menjalankan pencarian teks lengkap menggunakan CPU. Tetapkan parameter searcher_name ke LinearSearcher jika parameter builder_name diatur ke LinearBuilder.
build_index_params: Parameter yang ingin Anda konfigurasikan untuk jenis pembuat yang Anda tentukan untuk parameter builder_name. Untuk informasi lebih lanjut, lihat Proxima Builder.
search_index_params: Parameter yang ingin Anda konfigurasikan untuk jenis pencari yang Anda tentukan untuk parameter searcher_name. Untuk informasi lebih lanjut, lihat Proxima Searcher.
linear_build_threshold: Nilai ambang untuk operasi yang tidak menggunakan LinearBuilder. Jika jumlah dokumen kurang dari nilai ambang yang ditentukan, sistem menggunakan LinearBuilder dan LinearSearcher. LinearBuilder dapat membantu Anda mengurangi penggunaan memori dan memastikan hasil pengambilan tanpa kehilangan data. Kinerja LinearBuilder menurun jika terdapat jumlah dokumen yang berlebihan. Nilai default: 10.000.
min_scan_doc_cnt: Jumlah minimum set kandidat yang ingin Anda ambil. Parameter min_scan_doc_cnt dan proxima.qc.searcher.scan_ratio memiliki konsep serupa. Nilai default: 10.000. Jika Anda menentukan nilai untuk parameter min_scan_doc_cnt dan menentukan nilai untuk parameter proxima.qc.searcher.scan_ratio, nilai yang lebih besar digunakan sebagai jumlah minimum set kandidat.
Jangan tentukan nilai berlebihan untuk parameter min_scan_doc_cnt atau proxima.qc.searcher.scan_ratio. Jika Anda menentukan nilai berlebihan, kinerja sistem menurun dan terjadi latensi.
Dalam sebagian besar kasus, jika Anda ingin mengambil vektor top-k, kami merekomendasikan Anda menggunakan max(10.000, 100*topk) sebagai nilai parameter min_scan_doc_cnt dan menggunakan max(10.000, 100*topk)/total_doc_cnt sebagai nilai parameter proxima.qc.searcher.scan_ratio. Selain itu, Anda harus mengonfigurasi parameter berdasarkan kinerja, rasio pengambilan, dan jumlah dokumen Anda.
Kedua parameter serupa ini digunakan untuk memenuhi persyaratan dalam skenario waktu nyata dan multi-kategori. Jika Anda adalah pengguna biasa, Anda dapat mengonfigurasi hanya parameter proxima.qc.searcher.scan_ratio.
enable_recall_report: Menentukan apakah akan melaporkan rasio pengambilan. Nilai default: false.
is_embedding_saved: Menentukan apakah akan menyimpan vektor asli. Nilai default: false. Jika Anda mengaktifkan kuantisasi INT8 atau FP16 dan mengaktifkan pengambilan waktu nyata, pastikan Anda menetapkan parameter is_embedding_saved ke true. Jika tidak, vektor tambahan gagal dibangun dalam batch.
Sintaks untuk kueri
Sintaks untuk kueri reguler
Sintaks HA3
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6...'
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Tentukan vektor yang ingin Anda kueri setelah titik dua (:).Sintaks SQL
query=select proxima_score('index_name') as score,id from table_name where MATCHINDEX('index_name', ?) order by score asc limit 5&&kvpair=timeout:1000,iquan.plan.cache.enable:true;urlencode_data:false;iquan.plan.prepare.level:jni.post.optimize;dynamic_params:[["0.892704,0.783731"]]
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Parameter dynamic_params dalam klausa kvpair menentukan vektor yang ingin Anda kueri.Sintaks untuk kueri vektor top n
Sintaks HA3
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10'
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Tentukan vektor yang ingin Anda kueri setelah titik dua (:) dan sebelum ampersand (&). Parameter n menentukan vektor top n yang dapat dikembalikan.Sintaks SQL
query=select proxima_score('index_name') as score,id from table_name where MATCHINDEX('index_name', ?) order by score asc limit 5&&kvpair=timeout:1000,iquan.plan.cache.enable:true;urlencode_data:false;iquan.plan.prepare.level:jni.post.optimize;dynamic_params:[["0.892704,0.783731&n=10"]]
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Parameter dynamic_params dalam klausa kvpair menentukan vektor yang ingin Anda kueri. Parameter n menentukan vektor top n yang dapat dikembalikan.Sintaks untuk kueri yang mencakup nilai ambang tertentu
Sintaks HA3
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10&sf=0.8'
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Tentukan vektor yang ingin Anda kueri setelah titik dua (:) dan sebelum ampersand pertama (&). Parameter sf menentukan nilai ambang berdasarkan mana sistem menyaring dokumen. Jika Anda menetapkan parameter search_type ke ip dalam file schema.json, dokumen yang memiliki produk dalam kurang dari 4.0 disaring. Jika Anda menetapkan parameter search_type ke l2 dalam file schema.json, dokumen yang memiliki jarak Euclidean lebih tinggi dari 2.0 disaring. OpenSearch Vector Search Edition menggunakan 2.0 sebagai nilai ambang untuk menyaring dokumen karena kuadrat dari jarak Euclidean dihitung berdasarkan kinerja.Sintaks SQL
query=select proxima_score('index_name') as score,id from table_name where MATCHINDEX('index_name', ?) order by score asc limit 5&&kvpair=timeout:1000,iquan.plan.cache.enable:true;urlencode_data:false;iquan.plan.prepare.level:jni.post.optimize;dynamic_params:[["0.892704,0.783731&n=10&sf=0.8"]]
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Parameter dynamic_params dalam klausa kvpair menentukan vektor yang ingin Anda kueri. Parameter sf menentukan nilai ambang berdasarkan mana sistem menyaring dokumen.Sintaks untuk kueri berdasarkan kategori
Sintaks HA3
query=aitheta_index_name:'16#0.1,0.2,0.98,0.6;1512#0.3,0.4,0.98,0.6&n=200'
// Kueri harus dienkripsi URL.
query=aitheta_index_name:'16%230.1%2c0.2%2c0.98%2c0.6%3b1512%230.3%2c0.4%2c0.98%2c0.6%26n%3d200'
Catatan: Jika Anda ingin mengkueri vektor berdasarkan kategori, Anda harus menentukan ID kategori dan vektor yang akan dikueri. Pisahkan ID kategori dan vektor dengan tanda pagar (#). Tanda pagar dalam kueri harus dienkripsi URL. Pisahkan beberapa kategori dengan koma (,) dan pisahkan beberapa vektor dengan titik koma (;).Sintaks SQL
query=select proxima_score('index_name') as score,id from table_name where MATCHINDEX('index_name', ?) order by score asc limit 5&&kvpair=timeout:1000,iquan.plan.cache.enable:true;urlencode_data:false;iquan.plan.prepare.level:jni.post.optimize;dynamic_params:[["16%230.1%2c0.2%2c0.98%2c0.6%3b1512%230.3%2c0.4%2c0.98%2c0.6%26n%3d200"]]
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Parameter dynamic_params dalam klausa kvpair menentukan vektor yang ingin Anda kueri.
Catatan: Nilai parameter dynamic_params harus dienkripsi URL.
Catatan: Jika Anda ingin mengkueri vektor berdasarkan kategori, Anda harus menentukan ID kategori dan vektor yang akan dikueri. Pisahkan ID kategori dan vektor dengan tanda pagar (#). Tanda pagar dalam kueri harus dienkripsi URL. Pisahkan beberapa kategori dengan koma (,) dan pisahkan beberapa vektor dengan titik koma (;).Sintaks untuk Kueri dengan Parameter Pengambilan
Sintaks HA3
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10&sf=0.8&search_params={"proxima.qc.searcher.scan_ratio":0.001,"proxima.general.searcher.scan_count":10000}'
Catatan: Parameter search_params menentukan parameter yang ingin Anda konfigurasikan untuk pengambilan vektor. Nilainya harus dalam format JSON. Untuk informasi lebih lanjut tentang parameter proxima.qc.searcher.scan_ratio, lihat bagian "Deskripsi parameter" dalam topik ini. Parameter proxima.general.searcher.scan_count setara dengan parameter min_scan_doc_cnt.
Catatan: Urutan parameter n, sf, dan search_params tidak dapat diubah.Sintaks SQL
query=select proxima_score('index_name') as score,id from table_name where MATCHINDEX('index_name', ?) order by score asc limit 5&&kvpair=timeout:1000,iquan.plan.cache.enable:true;urlencode_data:false;iquan.plan.prepare.level:jni.post.optimize;dynamic_params:[["0.892704,0.783731&n=10&sf=0.8&search_params={"proxima.qc.searcher.scan_ratio":0.001,"proxima.general.searcher.scan_count":10000}"]]
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Parameter dynamic_params dalam klausa kvpair menentukan vektor yang ingin Anda kueri. Parameter search_params menentukan parameter yang ingin Anda konfigurasikan untuk pengambilan vektor. Nilainya harus dalam format JSON. Untuk informasi lebih lanjut tentang parameter proxima.qc.searcher.scan_ratio, lihat bagian "Deskripsi parameter" dalam topik ini. Parameter proxima.general.searcher.scan_count setara dengan parameter min_scan_doc_cnt.
Catatan: Urutan parameter n, sf, dan search_params tidak dapat diubah.Sintaks untuk kueri yang mengurutkan hasil yang dikembalikan berdasarkan kesamaan
Sintaks HA3
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6...'&&kvpairs=first_formula:proxima_score(index_name)&&sort=+RANK
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Tentukan vektor yang ingin Anda kueri setelah titik dua (:) dan sebelum ampersand pertama (&). Klausa kvpair menentukan proxima_score (index_name) sebagai ekspresi pengurutan kasar. Klausa sort mengurutkan hasil kueri secara menaik berdasarkan skor kesamaan.Sintaks SQL
query=select proxima_score('index_name') as score,id from table_name where MATCHINDEX('index_name', ?) order by score asc limit 5&&kvpair=timeout:1000,iquan.plan.cache.enable:true;urlencode_data:false;iquan.plan.prepare.level:jni.post.optimize;dynamic_params:[["0.892704,0.783731"]]
Catatan: Parameter index_name menentukan nama indeks vektor Anda. Parameter dynamic_params dalam klausa kvpair menentukan vektor yang ingin Anda kueri. Fungsi proxima_score('index_name') digunakan untuk mendapatkan skor vektor. Klausa order by menentukan bahwa vektor diurutkan berdasarkan skor. asc menentukan urutan menaik. desc menentukan urutan menurun.