Tüm Ürünler
Search
Belge Merkezi

Elasticsearch:Aliyun-knn vektör arama eklentisi

Son Güncelleme:Oct 04, 2026

Alibaba Cloud Elasticsearch ekibi, Alibaba DAMO Akademisi'nin Proxima vektör kitaplığına dayalı bir vektör arama motoru eklentisi olan aliyun-knn eklentisini geliştirdi. Bu eklenti; görsel arama, video parmak izleme, yüz tanıma, konuşma tanıma ve ürün önerisi gibi kullanım durumları için vektör aramayı hızlı bir şekilde uygulamanıza olanak tanır. Bu konuda aliyun-knn eklentisinin nasıl kullanılacağı açıklanmaktadır.

Not
  • Bu kılavuz, eski Elasticsearch örneklerinde knn eklentisini kullanan müşteriler içindir.

  • Yeni vektör arama kullanım durumları için bir Elasticsearch örneği (sürüm 8.15 veya üzeri) satın almanızı ve motorun yerel vektör arama özelliklerini kullanmanızı öneririz.

Arka Plan

  • Kullanım durumları

    Alibaba Cloud Elasticsearch vektör arama motoru; Pailitao, Görsel Arama, Qutoutiao için video parmak izi örnekleme, "Bunu Beğenebilirsiniz" önerileri, kişiselleştirilmiş arama ve çapraz medya arama dahil olmak üzere büyük ölçekli üretim uygulamalarında kanıtlanmış bir başarı geçmişine sahiptir.

  • Çalışma şekli

    Alibaba Cloud Elasticsearch'teki vektör arama özelliği, Elasticsearch uzantı mekanizması üzerine oluşturulmuş bir eklentidir. Eklenti, yerel Elasticsearch sürümleriyle tamamen uyumludur ve bu sayede öğrenme sürecini kolaylaştırır. Vektör dizinleri gerçek zamanlı artımlı yazmayı ve neredeyse gerçek zamanlı (NRT) sorgulamayı destekler. Ayrıca çoklu çoğaltma desteği ve hata kurtarma dahil olmak üzere Elasticsearch'ün tüm yerel dağıtılmış yeteneklerini sağlar.

    Not

    Alibaba Cloud Elasticsearch vektör arama eklentisi, OSS anlık görüntüsü veya DataWorks kullanılarak veri geçişini desteklemez. Logstash kullanmanızı öneririz.

  • Algoritmalar

    Vektör arama motoru, Hiyerarşik Gezinilebilir Küçük Dünya (HNSW) ve doğrusal algoritmaları destekler. Bu algoritmalar, tek bir makinede bellekte tutulan küçük veri kümelerine sahip kullanım durumları için uygundur. Aşağıdaki tabloda bu iki algoritmanın performansı karşılaştırılmaktadır.

    Tablo 1. HNSW ve doğrusal algoritmaların performans karşılaştırması

    Bu tablodaki veriler bir Alibaba Cloud Elasticsearch V6.7.0 ortamında ölçülmüştür. Test ortamı aşağıdaki gibi yapılandırılmıştır:

    • Örnek yapılandırması: Her biri 16 çekirdekli, 64 GB bellekli ve 100 GB SSD bulut diskli iki veri düğümü.

    • Veri kümesi: SIFT 128 boyutlu float vektörleri.

    • Toplam veri: 20 milyon kayıt.

    • Dizin yapılandırması: Varsayılan parametreler.


    Performans ölçümü


    HNSW


    Doğrusal


    İlk 10 hatırlama oranı


    %98,6


    %100


    İlk 50 hatırlama oranı


    %97,9


    %100


    İlk 100 hatırlama oranı


    %97,4


    %100


    Gecikme süresi (p99)


    0 sn


    0,934 sn


    Gecikme süresi (p90)


    0,018 sn


    0,305 sn

    Not

    Bu tabloda p, yüzdelik dilimi ifade eder. Örneğin, Gecikme süresi (p99), sorguların %99'unun döndürüldüğü süredir.

Önkoşullar

  • aliyun-knn eklentisinin kurulum yöntemi, Alibaba Cloud Elasticsearch kümenizin sürümüne ve çekirdek sürümüne bağlı olarak değişir. Ayrıntılar için aşağıdaki tabloya bakın.

    Elasticsearch sürümü

    Çekirdek sürümü

    Açıklama

    6.7.0

    1.2.0'dan önce

    • Eklentiler sayfasında aliyun-knn eklentisini manuel olarak yüklemeniz gerekir. Daha fazla bilgi için bkz. Varsayılan eklentileri yükleme veya kaldırma.

    • Komut dosyası tabanlı arama ve dizin önceden ısıtma gibi özellikler desteklenmez. Bu özelliklere ihtiyacınız varsa, Alibaba Cloud Elasticsearch çekirdek sürümüne sahip bir küme kullanın. Daha fazla bilgi için bkz. Çekirdek sürümü sürüm notları.

    • Bir vektör dizini oluşturduğunuzda yalnızca varsayılan SquaredEuclidean uzaklık ölçümü desteklenir. distance_method parametresini kullanarak bir uzaklık ölçümü belirtemezsiniz.

    6.8

    Yok

    7.4

    Yok

    7.7

    Yok

    6.7.0

    1.2.0 veya üzeri

    • aliyun-knn eklentisi, varsayılan olarak yüklü olan apack eklentisine entegre edilmiştir. aliyun-knn eklentisini yüklemek veya kaldırmak için apack eklentisini yönetmeniz gerekir. Daha fazla bilgi için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.

    • Komut dosyası tabanlı arama, dizin önceden ısıtma ve genişletilmiş işlevler gibi gelişmiş özellikleri kullanmak için çekirdek sürümünü 1.3.0 veya üzeri bir sürüme yükseltmeniz gerekir. Talimatlar için bkz. Sürümleri yükseltme.

    • Bir vektör dizini oluştururken eşleme ayrıştırma hatası oluşursa, çekirdek sürümünü 1.3.0 veya üzeri bir sürüme yükseltip tekrar deneyin.

    7.10.0

    1.4.0 veya üzeri

    • aliyun-knn eklentisi, varsayılan olarak yüklü olan apack eklentisine entegre edilmiştir. aliyun-knn eklentisini yüklemek veya kaldırmak için apack eklentisini yönetmeniz gerekir. Daha fazla bilgi için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.

    • Küçük çekirdek sürümü 1.4.0 veya üzeriyse, apack eklentisi en son sürümdedir ve güncelleme gerektirmez. Eklenti sürümünü kontrol etmek için GET _cat/plugins?v komutunu çalıştırın.

    Diğer sürümler

    Yok

    Vektör arama desteklenmez.

    Not

    Çekirdek sürümü ile apack eklentisi sürümü farklıdır. apack eklentisi sürümünü kontrol etmek için GET _cat/plugins?v komutunu çalıştırın.

  • Dizininizi planlayın.

    Algoritma

    Kullanım durumları

    Bellekte

    Diğer

    hnsw

    • Tek makineli küçük veri kümeleri.

    • Düşük gecikme süresi gereksinimleri.

    • Yüksek hatırlama oranı gereksinimleri.

    Evet

    • hnsw algoritması "bir komşunun komşusu da büyük olasılıkla komşudur" fikrine dayanır. Bu algoritmanın uzaklık ölçümü üçgen eşitsizliğini (bir üçgenin iki kenarının toplamı üçüncü kenardan büyüktür) sağlamalıdır. Örneğin, iç çarpım vektör uzayları üçgen eşitsizliğini sağlamaz ve hnsw arama yöntemini kullanmak için Öklid veya küresel uzaylara dönüştürülmelidir.

    • Verileri yazdıktan sonra, sorgu gecikme süresini azaltmak için yoğun olmayan saatlerde düzenli olarak forceMerge çalıştırın.

    linear

    • Brute-force (kaba kuvvet) arama.

    • %100 hatırlama oranı.

    • Gecikme süresi veri hacmiyle birlikte artar.

    • Temel karşılaştırmalar için kullanın.

    Evet

    Yok.

  • Kümenizi planlayın.

    Parametre

    Açıklama

    Veri düğümü teknik özellikleri (Zorunlu)

    16 çekirdek 64 GB veya daha yüksek.

    Not

    aliyun-knn eklentisi ile dizin oluşturma kaynak açısından yoğundur. Düşük teknik özelliklere sahip kümeler darboğaz olabilir ve kararlılığı etkileyebilir. 16 çekirdek 64 GB veya daha yüksek teknik özelliklere sahip bir küme kullanın.

    Düğüm türü

    Kümenin özel master düğümleri olmalıdır.

    Küme yığın dışı belleği

    Kümedeki vektör verilerinin toplam boyutunun iki katından fazla.

    Örnek: Bir dizin, bir adet 960 boyutlu float alanı ve 400 belge içerir. Bir float 4 bayt kapladığından, vektör verileri için kullanılan bellek şu şekilde hesaplanır: 960 × 400 × 4 = 1,5 MB. Bu nedenle, yığın dışı bellek 3 MB'tan (1,5 MB × 2) fazla olmalıdır.

    Not
    • force merge işlemi gerçekleştirirseniz, hem eski hem de yeni veriler aynı anda belleğe yüklenir. Bu durumda, yukarıdaki formül kullanılarak hesaplanan değeri iki katına çıkarmalısınız.

    • 64 GB veya daha fazla belleğe sahip kümeler için yığın dışı bellek boyutu yaklaşık olarak toplam bellek eksi 32 GB'a eşittir (yığın dışı bellek ≈ toplam bellek - 32 GB).

    Yazma aktarım hızı

    Vektör dizini oluşturma CPU açısından yoğun bir görevdir. 16 çekirdek 64 GB'lık bir veri düğümü için, düğüm başına peak yazma aktarım hızını 5.000 tps ile sınırlayın.

    Ayrıca, bir vektör sorgusu sırasında tüm dizin dosyaları sistem belleğine yüklenir. Bu nedenle, iş sorgularını sunarken büyük hacimli yazmalardan kaçının. Bu, bellek baskısından kaynaklanan parça yeniden başlatmalarını önlemeye yardımcı olur.

    Not

    Bu değerler tahminidir. Planınızı gerçek iş yükünüz temelinde yapın, önceden yük testleri çalıştırın ve yeterli bellek sağlayın.

Sınırlamalar

  • aliyun-knn eklentisi, paylaşılan esnek depolama özelliği etkinleştirilmiş 6.7 sürümü örneklerde desteklenmez.

  • aliyun-knn eklentisini yüklemek için Alibaba Cloud Elasticsearch örneğinizin veri düğümlerinin 16 çekirdek 64 GB veya daha büyük olması gerekir. Düğümleriniz bu gereksinimi karşılamıyorsa, teknik özelliklerini yükseltmeniz gerekir. Daha fazla bilgi için bkz. Bir kümenin yapılandırmasını yükseltme.

  • aliyun-knn eklentisi, fiziksel çoğaltma özelliği gibi bazı gelişmiş AliES çekirdek özellikleriyle uyumlu değildir. Bu özellik etkinleştirilirse, eklentiyi kullanmadan önce devre dışı bırakmanız gerekir. Talimatlar için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.

  • aliyun-knn eklentisini kullanan örneklerde veri geçişi için OSS anlık görüntülerini veya DataWorks'ü kullanamazsınız. Bunun yerine Logstash kullanmanızı öneririz.

Vektör dizini oluşturma

  1. Elasticsearch kümenizin Kibana konsolunda oturum açın.

    Talimatlar için bkz. Kibana konsolunda oturum açma.

    Not

    Buradaki örnekler Elasticsearch V6.7.0 kullanmaktadır. Diğer sürümlerde işlemler biraz farklılık gösterebilir.

  2. Sol gezinme menüsünde, Management > Dev Tools seçeneğini belirleyin.

  3. Console sekmesinde, bir vektör dizini oluşturmak için aşağıdaki komutu çalıştırın.

    PUT test
    {
      "settings": {
        "index.codec": "proxima",
        "index.vector.algorithm": "hnsw"
      },
      "mappings": {
        "_doc": {
          "properties": {
            "feature": {
              "type": "proxima_vector", 
              "dim": 2, 
              "vector_type": "float", 
              "distance_method": "SquaredEuclidean" 
            }
          }
        }
      }
    }
    Not
    • Vektör dizinine Elasticsearch tarafından desteklenen diğer alan türlerini ekleyebilirsiniz.

    • Vektör dizinini oluştururken bir eşleme ayrıştırma hatası oluşursa: "type": "mapper_parsing_exception", "reason": "Mapping definition for [feature] has unsupported parameters: [distance_method : SquaredEuclidean]", çekirdeği en son sürüme yükseltin ve tekrar deneyin.

    Tür

    Parametre

    Varsayılan

    Açıklama

    setting

    index.codec

    proxima

    Alt katmanda bir proxima kNN dizininin oluşturulup oluşturulmayacağını belirtir. Geçerli değerler:

    • proxima (Önerilen): Vektör aramayı desteklemek için alt katmanda bir proxima kNN dizini oluşturulur.

    • null: Bir proxima kNN dizini oluşturmaz. Bunun yerine yalnızca bir ileri dizin oluşturur. Bu durumda, proxima_vector türündeki alanlar yalnızca komut dosyası tabanlı aramayı destekler ve hnsw veya linear aramayı desteklemez.

    Not

    Sorgu gecikme süresinin birincil endişe olmadığı büyük veri kümeleri için bu parametreyi kaldırabilir veya null olarak ayarlayabilirsiniz. Bu, komut dosyası tabanlı arama kullanarak kNN vektör sorguları gerçekleştirmenize olanak tanır. Komut dosyası tabanlı arama, örneğiniz V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ise ya da örneğiniz V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri ise desteklenir.

    index.vector.algorithm

    hnsw

    Vektör arama algoritması. Geçerli değerler:

    • hnsw: HNSW algoritması.

    • linear: Doğrusal algoritma.

    index.vector.general.builder.offline_mode

    false

    kNN dizinini oluşturmak için çevrimdışı optimizasyon modunun kullanılıp kullanılmayacağını belirtir. Geçerli değerler:

    • false: Çevrimdışı optimizasyon modunu devre dışı bırakır.

    • true: Çevrimdışı optimizasyon modunu etkinleştirir. Bu mod, yazma sırasında parça parçalanmasını azaltır ve yazma aktarım hızını artırır.

    Not
    • Çevrimdışı optimizasyon modunu etkinleştirmek için örneğinizin V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ya da V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri olması gerekir. Çevrimdışı optimizasyon modunda oluşturulan dizinler komut dosyası tabanlı veri aramayı desteklemez.

    • Tam veri kümesinin tek seferlik toplu içe aktarmaları için çevrimdışı optimizasyon modunun etkinleştirilmesini öneririz.

    mapping

    type

    proxima_vector

    Vektör alanı türü. Örneğin, feature alanını proxima_vector olarak ayarlamak, feature öğesinin bir vektör alanı olduğunu belirtir.

    dim

    2

    Vektör boyutu. Bu parametre zorunludur. Değer 1 ile 2048 arasında bir tamsayı olmalıdır.

    vector_type

    float

    Vektörün veri türü. Geçerli değerler:

    • float: Kayan nokta.

    • short: Kısa tamsayı.

    • binary: İkili.

    binary türü için vektör verileri işaretsiz 32 bitlik tamsayılar (uint32) dizisi olarak temsil edilmeli ve dim değeri 32'nin katı olmalıdır.

    Örneğin, iş verileriniz 64 bitlik ikili değer 1000100100100101111000001001111101000011010010011010011010000100 ise, yazılan vector [-1994006369, 1128900228] şeklindedir.

    Not

    Üç vektör veri türünün tümü, örneğiniz V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ya da V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri ise desteklenir. Daha önceki sürümler yalnızca float türünü destekler.

    distance_method

    SquaredEuclidean

    Uzaklık fonksiyonu. Geçerli değerler:

    • SquaredEuclidean: Öklid uzaklığı (karekökü alınmamış).

    • InnerProduct: İç çarpım.

    • Cosine: Kosinüs benzerliği.

    • Hamming: Hamming uzaklığı (yalnızca binary türü için).

    Not
    • Dört uzaklık fonksiyonunun tümü, örneğiniz V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ya da V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri ise desteklenir. Daha önceki sürümler yalnızca varsayılan SquaredEuclidean fonksiyonunu destekler. distance_method parametresini kullanarak diğer uzaklık fonksiyonlarını belirtemezsiniz.

    • Uzaklık fonksiyonları hakkında daha fazla bilgi için bkz. Uzaklık fonksiyonları.

    • Hamming fonksiyonu özel bir uygulamaya sahip olduğundan, hnsw veya linear dizinleri kullanılırken standart knn sorguları desteklenmez. Yalnızca script_score ile uyumlu komut dosyası tabanlı sorgular desteklenir. Sorgu ifadelerinin belirli iş gereksinimleriniz için uygun olduğundan emin olmak üzere bunları farklı senaryolarda test etmeniz gerekir.

    Not
    • apack eklentisi sürümünü kontrol etmek için GET /_cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılamıyorsa, yükseltme talep etmek için destek talebi gönderebilirsiniz.

    • kNN vektör araması ayrıca gelişmiş sorgu parametreleri de sağlar. Daha fazla bilgi için bkz. Gelişmiş parametreler.

  4. Bir belge eklemek için aşağıdaki komutu çalıştırın.

    POST test/_doc
    {
      "feature": [1.0, 2.0]
    }
    Not

    Binary dışındaki tüm dizi türleri için dizi uzunluğu dim ile eşleşmelidir. Binary türü için vektör verileri işaretsiz 32 bitlik tamsayılar (uint32) dizisine dönüştürülmeli ve dim 32'nin tam katı olmalıdır.

Vektör arama

  • Standart arama

    Standart bir arama gerçekleştirmek için aşağıdaki komutu çalıştırın.

    GET test/_search
    {
      "query": {
        "hnsw": {  
          "feature": {
            "vector": [1.5, 2.5], 
            "size": 10 
          }
        }
      }
    }

    Aşağıdaki tabloda yaygın parametreler açıklanmaktadır.

    Parametre

    Açıklama

    hnsw

    Vektör arama algoritması. Bu, dizini oluştururken belirtilen algorithm ile eşleşmelidir.

    vector

    Sorgu vektörü. Dizinin uzunluğu, dizini oluştururken mapping içinde belirtilen dim ile aynı olmalıdır.

    size

    Döndürülecek belge sayısını belirtir.

    Not
    • Bir vektör aramasındaki size parametresi, yerleşik Elasticsearch size parametresinden farklıdır. İlki, kNN eklentisi tarafından döndürülen belge sayısını kontrol ederken, ikincisi tüm sorgu tarafından döndürülen toplam belge sayısını kontrol eder. Bir sorgu çalıştırdığınızda, sistem önce vektör arama size parametresini kullanarak belirtilen sayıda en iyi belgeyi alır. Ardından, nihai belge kümesini döndürmeden önce sonuçlara yerleşik Elasticsearch size parametresini uygular.

    • Varsayılan olarak 10 olan yerleşik Elasticsearch size parametresi ile aynı değere vektör arama size parametresini ayarlamanızı öneririz.

    Not

    kNN vektör araması ayrıca gelişmiş sorgu parametreleri de sağlar. Daha fazla bilgi için bkz. Gelişmiş parametreler.

  • Komut dosyası sorgusu

    Vektör komut dosyası sorguları yalnızca script_score ile kullanılabilir. Örneğin, döndürülen her belgeyi 1/(1+l2Squared(params.queryVector, doc['feature'])) formülüne göre puanlamak için script_score kullanabilirsiniz. Aşağıdaki komut bir örneği göstermektedir.

    GET test/_search
    {
      "query": {
        "match_all": {}
      },
      "rescore": {
        "query": {
          "rescore_query": {
            "function_score": {
              "functions": [{
                "script_score": {
                  "script": {
                      "source": "1/(1+l2Squared(params.queryVector, doc['feature'])) ", 
                      "params": {
                        "queryVector": [2.0, 2.0]
                      }
                  }
                }
              }]
            }
          }
        }
      }
    }

    kNN vektör komut dosyası sorgusu, X-Pack tarafından sağlanan işlevleri desteklemez. Yalnızca aşağıdaki işlevler desteklenir:

    İşlev

    Açıklama

    l2Squared(float[] queryVector, DocValues docValues)

    Öklid uzaklık işlevi.

    hamming(float[] queryVector, DocValues docValues)

    Hamming uzaklık işlevi.

    • cosineSimilarity(float[] queryVector, DocValues docValues)

    • cosine(float[] queryVector, DocValues docValues)

    Kosinüs benzerliği işlevi.

    Not

    Alibaba Cloud Elasticsearch V6.7 için cosineSimilarity(float[] queryVector, DocValues docValues) işlevini kullanın. V7.10 için cosine(float[] queryVector, DocValues docValues) işlevini kullanın.

    Not
    • Komut dosyası sorgusu özelliğini kullanmak için kurulumunuz aşağıdaki gereksinimlerden birini karşılamalıdır: apack eklentisi V1.2.1 veya üzeri ile küme sürümü 6.7.0 ya da apack eklentisi V1.4.0 veya üzeri ile küme sürümü 7.10.0. apack eklentisi sürümünü kontrol etmek için GET /_cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılamıyorsa, yükseltme talep etmek için destek talebi gönderebilirsiniz.

    • İşlev parametreleri:

      • float[] queryVector: Sorgu vektörü.

      • DocValues docValues: Belge vektörü.

    • Çevrimdışı optimizasyon modu ile oluşturulan dizinler için vektör komut dosyası sorguları desteklenmez (index.vector.builder.offlineMode = true).

  • Dizin önceden ısıtma

    Bir kNN dizini tam bellek içi arama gerçekleştirir; bu durum, dizin ilk yüklendiğinde soğuk başlangıçtan kaynaklanan yüksek sorgu gecikme süresine neden olabilir. kNN eklentisinin dizin önceden ısıtma özelliği, bir dizini arama isteklerini sunmadan önce yerel belleğe önceden yükleyerek bunu önler ve soğuk başlangıç gecikme süresini önemli ölçüde azaltır.

    • Tüm vektör dizinlerini önceden ısıtın.

      POST _vector/warmup
    • Belirli bir vektör dizinini önceden ısıtın.

      POST _vector/{indexName}/warmup
    Not
    • Dizin önceden ısıtma özelliğini kullanmak için kurulumunuz aşağıdaki gereksinimlerden birini karşılamalıdır: apack eklentisi V1.2.1 veya üzeri ile küme sürümü 6.7.0 ya da apack eklentisi V1.4.0 veya üzeri ile küme sürümü 7.10.0. apack eklentisi sürümünü kontrol etmek için GET _cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılamıyorsa, yükseltme talep etmek için destek talebi gönderebilirsiniz.

    • Kümeniz çok sayıda büyük vektör dizini içeriyorsa ancak uygulamanız yalnızca bunların bir alt kümesinde vektör aramaları gerçekleştiriyorsa, bellek içi arama performansını artırmak için yalnızca bu belirli dizinleri önceden ısıtın.

Vektör puanlama

Vektör arama, doğrudan arama sıralamasını etkileyen bir uzaklık ölçümü işlevine dayalı birleşik bir puanlama formülü kullanır.

Puanlama formülü:

score = 1 / (vektör uzaklık işlevi + 1)

Not
  • Varsayılan olarak, vektör puanlama mekanizması kare Öklid uzaklığını kullanır.

  • Uygulamada, vektör verilerinizi optimize edebilir ve vektörler arasındaki mesafeyi belirlemek için sorgu puanından geriye doğru çalışarak puanlamayı iyileştirebilirsiniz.

Uzaklık ölçüm işlevleri

Farklı uzaklık ölçüm işlevleri farklı puanlama mekanizmaları kullanır. Aşağıdaki tabloda aliyun-knn eklentisi tarafından desteklenen uzaklık ölçüm işlevleri ayrıntılı olarak açıklanmaktadır.

Uzaklık işlevi

Açıklama

Puanlama formülü

En uygun olduğu durumlar

Örnek

SquaredEuclidean (Kare Öklid uzaklığı)

Öklid uzaklığı, çok boyutlu bir uzayda iki nokta arasındaki düz çizgi mesafesidir. 2B ve 3B uzayda fiziksel mesafeye karşılık gelir.

İki n boyutlu vektör için, A = [A1, A2, ..., An] ve B = [B1, B2, ..., Bn]:

  • Kare Öklid uzaklığı = (A1-B1)² + (A2-B2)² + ... + (An-Bn)²

  • Puan = 1 / (uzaklık + 1)

Not

Varsayılan olarak, vektör puanlama kare Öklid uzaklığını kullanır.

Öklid uzaklığı, vektör bileşenlerinin değerlerindeki mutlak farkı yansıtır. Farkların büyüklüğünün önemli olduğu analizler için en iyisidir; örneğin, davranış metriklerine göre kullanıcı değerindeki benzerlik veya varyansın analiz edilmesi.

[0,0] ve [1,2] 2B vektörleri için kare Öklid uzaklığı (1-0)² + (2-0)² = 5'tir.

Cosine (kosinüs benzerliği)

Kosinüs benzerliği, iki vektör arasındaki açı kosinüsünü hesaplayarak iki vektör arasındaki benzerliği değerlendirir.

İki n boyutlu vektör için, A = [A1, A2, ..., An] ve B = [B1, B2, ..., Bn]:

  • Formül: Cosine余弦距离

  • Puan = 1 / (uzaklık + 1); burada uzaklık (1 - kosinüs benzerliği) olarak tanımlanır.

Kosinüs benzerliği, vektörlerin büyüklüğünden ziyade yönüne odaklanır ve mutlak değerlere karşı duyarsızdır. Farklı kullanıcılar arasında derecelendirme ölçeklerindeki tutarsızlıkları düzeltebildiğinden, içerik derecelendirmelerine dayalı olarak kullanıcı ilgisini karşılaştırmak için idealdir.

[1,1] ve [1,0] 2B vektörleri için kosinüs benzerliği 0,707'dir.

InnerProduct (iç çarpım)

İç çarpım, ayrıca nokta çarpımı olarak da bilinir ve tek bir skaler değer üretmek için iki reel sayı vektörünü birleştiren bir işlemdir.

İki n boyutlu vektör için, A = [A1, A2, ..., An] ve B = [B1, B2, ..., Bn]:

  • İç çarpım = A1B1 + A2B2 + ... + An*Bn

  • Puan = iç çarpım

İç çarpım, iki vektörün hem açısını hem de büyüklüğünü dikkate alır. Vektörler normalize edildiğinde, iç çarpım kosinüs benzerliğine eşdeğerdir.

[1,1] ve [1,5] 2B vektörleri için iç çarpım (11) + (15) = 6'dır.

Hamming (yalnızca binary vektörler için)

Bilgi teorisinde, eşit uzunluktaki iki dize arasındaki Hamming uzaklığı, karşılık gelen karakterlerin farklı olduğu konumların sayısıdır.

İki n bitlik binary dize, x ve y için:

  • d(x,y) = Σ(x[i] ⊕ y[i]) i=0, 1, ..., n-1 için; burada ⊕ XOR işlemini ifade eder.

  • Puan = 1 / (uzaklık + 1)

Genellikle veri iletimlerinde hata algılama ve düzeltme için kullanılır; burada iki binary kelime arasındaki farklı bitlerin sayısı sayılarak iletim hatası tahmin edilir.

Örneğin, 1011101 ve 1001001 arasındaki Hamming uzaklığı 2'dir.

Not

aliyun-knn eklentisini kullanırken, binary vektör verileri işaretsiz 32 bitlik tamsayılar (uint32) dizisi olarak temsil edilmeli ve dim parametre değeri 32'nin katı olmalıdır.

Not
  • Birden çok uzaklık ölçüm işlevi kullanmak için kümenizin aşağıdaki gereksinimlerden birini karşıladığından emin olun: apack eklentisi V1.2.1 veya üzeri ile küme sürümü 6.7.0 ya da apack eklentisi V1.4.0 veya üzeri ile küme sürümü 7.10.0. apack eklentisi sürümünüzü kontrol etmek için GET _cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılanmıyorsa, desteklenen tek kNN uzaklık ölçüm işlevi SquaredEuclidean'dir. Diğer uzaklık işlevlerini kullanmanız gerekiyorsa, eklenti yükseltmesi talep etmek için destek talebi gönderebilirsiniz.

  • Uzaklık ölçüm işlevini, dizin mapping içindeki distance_method parametresini kullanarak belirtebilirsiniz.

Devre kesici parametreleri


Parametre


Açıklama


Varsayılan


indices.breaker.vector.native.indexing.limit


Yığın dışı bellek kullanımı bu eşiği aşarsa, devre kesici tetiklenir ve yazma işlemlerini engeller. Arka plan oluşturma işlemi tamamlandıktan ve bellek serbest bırakıldıktan sonra yazma işlemleri devam eder. Tetiklenen bir devre kesici, sistem bellek tüketiminin çok yüksek olduğunu gösterir. Yazma aktarım hızını azaltmanızı öneririz.


%70


indices.breaker.vector.native.total.limit


Arka plan vektör dizini oluşturma işlemlerinin kullanabileceği yığın dışı belleğin maksimum yüzdesini tanımlar. Yığın dışı bellek kullanımı bu sınırı aşarsa, parçalar yeniden başlatılabilir.


%80

Önemli

Vektör devre kesici parametreleri küme yapılandırmasının bir parçasıdır. Ayarları görüntülemek için GET _cluster/settings komutunu çalıştırın. Devre kesici eşiklerini değiştirmeyin.

Gelişmiş parametreler

Tablo 2. Oluşturma parametreleri (hnsw)


Parametre


Açıklama


Varsayılan


index.vector.hnsw.builder.max_scan_num


Grafik oluşturma sırasında en yakın komşu aramasının kapsamını kontrol ederek en kötü durum performansını sağlar.


100000


index.vector.hnsw.builder.neighbor_cnt


0. katman grafiğindeki her düğüm için komşu sayısı. 100 değeri önerilir. Daha yüksek bir değer grafik oluşturma kalitesini artırır ancak çevrimdışı dizin boyutunu büyütür.


100


index.vector.hnsw.builder.upper_neighbor_cnt


HNSW grafiğinin üst katmanlarında (0. katman dışındaki tüm katmanlar) her düğüm için maksimum komşu sayısı. Bunun neighbor_cnt değerinin yarısına ayarlanması önerilir. Maksimum değer 255'tir.


50


index.vector.hnsw.builder.efconstruction


Grafik oluşturma sırasında en yakın komşular için dinamik aday listesinin boyutunu kontrol eder. Daha yüksek bir değer çevrimdışı grafiğin kalitesini artırır ancak dizin oluşturmayı yavaşlatır. Başlangıç değeri olarak 400 önerilir.


400


index.vector.hnsw.builder.max_level

0. katman ve üst katmanlar dahil olmak üzere HNSW grafiğindeki toplam katman sayısı. Örneğin, scaling_factor değeri 30 olan 10 milyon belge için katman sayısı ceil(log₃₀(10.000.000)) olup 5'tir.

Bu parametrenin etkinlik üzerinde küçük bir etkisi vardır. Başlangıç değeri olarak 6 önerilir.


6


index.vector.hnsw.builder.scaling_factor


Katmanlar arasındaki üstel ölçeklendirme faktörü. Bu değer genellikle 10 ile 100 arasındadır. Daha yüksek bir scaling_factor daha az katmanla sonuçlanır. Başlangıç değeri olarak 50 önerilir.


50

Not

Yukarıdaki parametreler dizin settings içinde yapılandırılmalı ve yalnızca hnsw algoritması tarafından desteklenir.

Tablo 3. Arama parametreleri (hnsw)


Parametre


Açıklama


Varsayılan


ef


Çevrimiçi arama sırasında keşfedilecek dinamik aday listesinin boyutunu kontrol eder. Daha yüksek bir değer hatırlama oranını artırır ancak performansı düşürür. 100 ile 1000 arasında bir değer önerilir.


100

Örnek sorgu:

GET test/_search
{
  "query": {
    "hnsw": {
      "feature": {
        "vector": [1.5, 2.5],
        "size": 10,
        "ef": 100       
      }
    }
  }
}

SSS

  • S: Bir sorgunun hatırlama oranını nasıl değerlendiririm?

    Y: Aynı yapılandırmalara sahip iki dizin oluşturun; biri HNSW algoritmasını, diğeri doğrusal arama algoritmasını kullansın. Bir istemciden her iki dizine de aynı vektör verilerini gönderin. Dizinler yenilendikten sonra, her ikisinden de belge kimliklerini almak için aynı sorgu vektörünü kullanın. Hatırlama oranı, her iki dizinden elde edilen kesişen belge kimliklerinin sayısının, doğrusal arama dizininden elde edilen toplam kimlik sayısına bölünmesiyle hesaplanır.

  • S: Küme yazma işlemleri sırasında bir circuitBreakingException hatası oluşursa ne yapmalıyım?

    Y: Bu hata, yığın dışı bellek kullanımının indices.breaker.vector.native.indexing.limit (varsayılan olarak %70) tarafından belirtilen eşiği aştığını ve yazma işlemlerinde devre kesmeyi tetiklediğini gösterir. Devre kesici, arka plan dizin oluşturma tamamlandıktan ve bellek serbest bırakıldıktan sonra genellikle otomatik olarak sıfırlanır. İstemcinize bir yeniden deneme mekanizması eklemenizi öneririz.

  • S: Yazma işlemleri durduktan sonra CPU kullanımı neden yüksek kalıyor?

    Y: Vektör dizini oluşturma, yenileme veya flush aşamaları sırasında gerçekleşir. Yazma trafiği durduktan sonra bile, vektör dizinini oluşturmaya yönelik arka plan görevleri çalışmaya devam edebilir. Bu görevler, son yenileme döngüsü tamamlandıktan sonra hesaplama kaynaklarını serbest bırakır.

  • S: aliyun-knn eklentisi ile sorgulama yaparken aşağıdaki hatayı alıyorum: class_cast_exception: class org.apache.lucene.index.SoftDeletesDirectoryReaderWrapper$SoftDeletesFilterCodecReader cannot be cast to class org.apache.lucene.index.SegmentReader (org.apache.lucene.index.SoftDeletesDirectoryReaderWrapper$SoftDeletesFilterCodecReader and org.apache.lucene.index.SegmentReader are in unnamed module of loader 'app'). Ne yapmalıyım?

    Y: Dizin için fiziksel çoğaltma özelliğini devre dışı bırakın. Daha fazla bilgi için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.

  • S: aliyun-knn eklentisi ile vektör araması yavaşsa veya bellekle ilgili devre kesme oluşursa ne yapabilirim?

    Y: aliyun-knn eklentisi, bellek içi vektörleri kullanarak vektör araması gerçekleştirir; bu, bellek açısından yoğun bir işlemdir. Büyük dizinler, belleğe yüklendiğinde yavaş performansa neden olabilir veya devre kesmeyi tetikleyebilir. En iyi uygulama olarak, dizin veri boyutunuzu mevcut makine belleğinin yarısı ile sınırlayın. Veri hacmini azaltamıyorsanız ve bellek yetersiz kalıyorsa, küme yapılandırmasını yükseltin.

  • S: kNN senaryolarında, must_not exists sorgusu boş 'feature' alanına sahip belgeleri filtreleyemiyor. Bu verileri filtrelemek için sorguyu nasıl yazabilirim?

    Y: kNN verilerinin depolama mekanizması benzersizdir ve belirli DSL sorgularıyla uyumsuz olabilir. Bunun yerine verileri filtrelemek için aşağıdaki komut dosyasını kullanabilirsiniz.

    GET jx-similar-product-v1/_search
    {
       "query": {
         "bool": {
           "must": {
             "script": {
               "script": {
                 "source": "doc['feature'].empty",
                 "lang": "painless"
                 }
             }
           }
         }
       }
    }