Alibaba Cloud Elasticsearch vektör motoru, tek bir küme içinde tam metin aramasının yanı sıra büyük ölçekli vektör benzerlik araması yapmanızı sağlar. Bu özelliği kullanarak öneri sistemleri, görüntü geri alma işlem hatları ve doğal dil işleme uygulamaları oluşturabilirsiniz.
Vektör motoru, HNSW dizinlerini yığın dışı bellekte saklar. Veri düğümü teknik özelliklerini ve sayısını seçmeden önce, bu konunun ilerleyen kısımlarındaki bellek hesaplama rehberini kullanarak yığın dışı bellek kullanımınızı tahmin edin.
Vektör motoru düzenli olarak güncellenir. En iyi performans ve maliyet verimliliği için Alibaba Cloud Elasticsearch 8.x'in en son sürümünü kullanın.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Çalışan bir Alibaba Cloud Elasticsearch 8.x örneği. Henüz bir örnek oluşturmadıysanız, nasıl oluşturulacağını öğrenmek için Hızlı başlangıç: Örnek oluşturmaktan veri almaya bölümünü takip edin.
Arama yöntemi seçin
Dizin oluşturmadan önce, kullanım durumunuza hangi kNN arama yönteminin uyduğunu belirleyin:
| Yöntem | Nasıl çalışır | En uygun olduğu durumlar |
|---|---|---|
| Yaklaşık kNN | Hızlı ve ölçeklenebilir arama için HNSW dizinlemesiyle knn yan tümcesini kullanır |
Çoğu üretim iş yükü |
| Tam kNN | Her belgeyi kaba kuvvetle puanlamak için bir script_score sorgusu kullanır |
Küçük veri kümeleri veya hassas puanlama |
Yaklaşık kNN, düşük gecikme süresi ve iyi doğruluk sunar. Tam kNN doğru sonuçlar garanti eder ancak büyük veri kümelerinde ölçeklenemez.
Adım 1: Dizin oluşturun
Vektör verilerini depolamak için bir dense_vector alanı içeren bir dizin oluşturun:
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"
}
}
}
}
Temel noktalar:
dimsdeğerini gömme modelinizin çıktı boyutuna ayarlayın. Dizindeki tüm belgeler aynı boyutu kullanmalıdır.Veri hacminize ve performans gereksinimlerinize göre
number_of_shardsvenumber_of_replicasdeğerlerini belirleyin.dense_vector; benzerlik ölçütleri ve dizin seçenekleri gibi ek parametreleri destekler. Tam liste için Yoğun vektör alan türü sayfasına bakın.
Adım 2: Belgeleri dizine ekleyin
Toplu API veya tek tek dizin isteklerini kullanarak belgeleri ekleyin. Her belgenin vektörü, eşlemedeki dims değeriyle eşleşmelidir:
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]
}
Bir belgenin vektör boyutu, eşlemedeki dims değeriyle eşleşmezse Elasticsearch belgeyi hata ile reddeder.
Adım 3: kNN araması çalıştırın
Yaklaşık kNN (önerilen)
Bir sorgu vektörü ve döndürülecek sonuç sayısını belirterek bir kNN sorgusu gönderin:
GET my_vector_index/_search
{
"knn": {
"field": "my_vector",
"query_vector": [-5, 9, -12],
"k": 10,
"num_candidates": 100
},
"fields": ["my_text"]
}
| Parametre | Açıklama |
|---|---|
k |
Döndürülecek en yakın komşu sayısı. num_candidates değerinden küçük veya ona eşit olmalıdır. Varsayılan olarak size değerini alır. |
num_candidates |
Sonuçları birleştirmeden önce parça başına toplanacak en yakın komşu adayları. k değerinden büyük ve 10.000'den küçük veya ona eşit olmalıdır. Varsayılan olarak Math.min(1.5 * k, 10000) değerini alır. Daha yüksek bir değer, gecikme süresi pahasına geri çağırmayı iyileştirir. |
HNSW terimleriyle,num_candidatessorgu zamanındakief(keşif faktörü) değerine karşılık gelir; her parçanın en iyi sonuçlarını döndürmeden önce kaç aday belgeyi tarayacağını kontrol eder.kise tüm parçalarda döndürülen nihai belge sayısıdır.
Tam kNN
Kaba kuvvetle puanlama yapmak için bir vektör işlevi içeren script_score sorgusu kullanın. Bu yaklaşım dizindeki tüm belgeleri tarar ve büyük veri kümelerinde ölçeklenemez.
Ek kNN arama yetenekleri
knn yan tümcesi aşağıdaki özellikleri destekler:
| Özellik | Açıklama |
|---|---|
| Filtreleme | kNN aramasını çalıştırmadan önce sonuçları bir belge alt kümesiyle sınırlamak için bir filter yan tümcesi ekleyin. |
| Minimum skor eşiği | Minimum benzerlik skorunun altındaki belgeleri hariç tutmak için similarity parametresini kullanın. |
| İç içe alanlar | nested alanlarda depolanan vektörlerde kNN aramaları çalıştırın. |
| Çok alanlı kNN | Tek bir istekte birden fazla knn alanında sorgu çalıştırın. |
| Yeniden puanlama | Daha yüksek hassasiyet için yaklaşık kNN sonuçlarını bir script yeniden puanlama ile sıralayın. |
Tam özellik referansı için k-en yakın komşu (kNN) araması sayfasına bakın.
Üretim hususları
Bellek planlaması
Vektör motoru, HNSW dizinlerini yığın dışı bellekte saklar. Belleğin yetersiz tahmini, öğelerin önbellekten atılmasına neden olur ve arama gecikme süresini artırır. Üretime geçmeden önce, bu konudaki bellek hesaplama rehberini kullanarak veri düğümlerinizin boyutunu belirleyin.
`num_candidates` ayarı
Varsayılan değerle (Math.min(1.5 * k, 10000)) başlayın. Geri çağırma hedefinizin altında kalırsa num_candidates değerini kademeli olarak artırın. Daha yüksek bir değer, daha fazla performans maliyeti karşılığında geri çağırmayı iyileştirir.
Parça planlaması
Beklenen veri hacminize, sorgu aktarım hızınıza ve kullanılabilirlik gereksinimlerinize göre number_of_shards ve number_of_replicas değerlerini ayarlayın.
Boyut tutarlılığı
dims değerini gömme modelinizin tam çıktı boyutuna ayarlayın. Boyut uyumsuzlukları dizine ekleme hatalarına neden olur.
Elasticsearch'ü güncel tutun
Vektör motoru, performans ve maliyet verimliliğinde sürekli iyileştirmeler alır. Bu güncellemelerden yararlanmak için en son Alibaba Cloud Elasticsearch 8.x sürümünü çalıştırın.