Alibaba Cloud Elasticsearch vector engine dirancang untuk menangani data vektor berskala besar, menggabungkan kemampuan pencarian Elasticsearch yang andal dengan komputasi kemiripan vektor. Engine ini cocok digunakan untuk sistem rekomendasi, pengambilan gambar, dan pemrosesan bahasa alami. Topik ini menjelaskan cara menggunakan Alibaba Cloud Elasticsearch vector engine secara efisien serta menyediakan praktik terbaik. Vector engine diperbarui secara berkala; gunakan versi terbaru Alibaba Cloud Elasticsearch untuk mencapai performa optimal, efisiensi biaya, dan pengalaman pengguna terbaik.
Prasyarat
Instans ES telah dibuat. Jika Anda belum membuat instans, lihat Quick start: From creating an instance to retrieving data untuk membuat instans Alibaba Cloud ES 8.x versi terbaru.
Vector engine menggunakan jumlah besar memori off-heap untuk cache indeks vektor. Untuk memilih spesifikasi dan jumlah node data yang sesuai, perkirakan penggunaan memori off-heap menggunakan panduan perhitungan memori yang tersedia di bagian akhir topik ini.
Prosedur
1. Buat indeks
Buat indeks yang mendukung penyimpanan data vektor. Berikut contoh definisi indeks:
PUT /my_vector_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 3
},
"my_text" : {
"type" : "keyword"
}
}
}
}Pengaturan
number_of_shardsdannumber_of_replicasbergantung pada volume data dan kebutuhan performa Anda.Gunakan tipe bidang
dense_vectoruntuk menyimpan data vektor. Atur parameterdimssesuai dimensi vektor.Tipe bidang dense_vector memiliki banyak parameter. Untuk detailnya, lihat Dense vector field type.
2. Impor data
Impor data ke indeks vektor Elasticsearch Anda menggunakan metode seperti Bulk API. Berikut contohnya:
PUT my_vector_index/_doc/1
{
"my_text" : "text1",
"my_vector" : [0.5, 10, 6]
}
PUT my_vector_index/_doc/2
{
"my_text" : "text2",
"my_vector" : [-0.5, 10, 10]
}Pastikan dimensi vektor sesuai dengan dimensi yang ditentukan dalam indeks.
3. Lakukan pencarian vektor
Gunakan pencarian kemiripan vektor Elasticsearch untuk menemukan dokumen paling mirip dengan menentukan vektor kueri. Berikut contoh kuerinya:
GET my_vector_index/_search
{
"knn": {
"field": "my_vector",
"query_vector": [-5, 9, -12],
"k": 10,
"num_candidates": 100
},
"fields": [ "my_text" ]
}Parameter | Konten |
| (Opsional) Jumlah tetangga terdekat yang akan dikembalikan. Nilai ini harus kurang dari atau sama dengan num_candidates. Secara default, nilainya sama dengan nilai |
| (Opsional) Jumlah kandidat tetangga terdekat yang dipertimbangkan untuk setiap shard. Parameter ini berdampak signifikan terhadap performa dan tingkat recall. Nilai |
Bagian ini menjelaskan parameter k dan num_candidates. Dalam HNSW, num_candidates merujuk pada nilai ef dari kueri, yang merepresentasikan jumlah dokumen terdekat sebanyak num_candidates yang dikumpulkan dalam setiap shard, sedangkan k adalah jumlah dokumen yang dikembalikan Elasticsearch dalam hasil akhir.
Fitur tambahan pencarian vektor meliputi hal-hal berikut:
Kueri
knnmendukungfilter, parametersimilarityuntuk mengatur skor minimumscorebagi dokumendocyang cocok, serta bidangnested.Mendukung kueri beberapa bidang
knnsekaligus.Mendukung kueri
knneksak menggunakanscript.Mendukung
rescoremenggunakanscript.Untuk daftar lengkap fitur, lihat k-nearest neighbor (knn) search.