Aracılığıyla paylaş


Vektör arama dizinini sorgulama

Bu makalede, filtrelerin ve yeniden boyutlandırmanın nasıl kullanılacağı da dahil olmak üzere bir vektör arama dizininin nasıl sorgulandığı açıklanmaktadır.

Vektör arama uç noktalarının ve dizinlerinin nasıl oluşturulacağını ve sorgulandığını gösteren not defterleri için bkz . Vektör arama örneği not defterleri. Başvuru bilgileri için bkz. Python SDK başvurusu.

Kurulum

Vektör arama SDK'sını kullanmak için bunu not defterinize yüklemeniz gerekir. Paketi yüklemek için aşağıdaki kodu kullanın:

%pip install databricks-vectorsearch
dbutils.library.restartPython()

Ardından VectorSearchClientiçeri aktarmak için aşağıdaki komutu kullanın:

from databricks.vector_search.client import VectorSearchClient

Kimlik doğrulaması hakkında bilgi için bkz. Veri koruma ve kimlik doğrulaması.

Vektör arama dizinini sorgulama

Vektör arama dizinini yalnızca Python SDK'sını, REST API'yi veya SQL vector_search() AI işlevini kullanarak sorgulayabilirsiniz.

Uyarı

Dizini sorgulayan kullanıcı vektör arama dizininin sahibi değilse, kullanıcının aşağıdaki UC ayrıcalıklarına sahip olması gerekir:

  • Katalogda USE CATALOG, vektör arama dizinini içerir.
  • Vektör arama dizinini içeren şemada USE SCHEMA.
  • Vektör arama dizininde SELECT.

Varsayılan sorgu türü ( ann yaklaşık en yakın komşudur). Karma anahtar sözcük benzerliği araması yapmak için query_type parametresini hybridolarak ayarlayın. Karma arama ile tüm metin meta veri sütunları dahil edilir ve en fazla 200 sonuç döndürülür.

Sorguda yenidenleştiriciyi kullanmak için bkz. Sorguda yenidenleştiriciyi kullanma.

Önemli

Tam metin araması beta özelliği olarak kullanılabilir. Tam metin araması yapmak için parametresini query_type olarak FULL_TEXTayarlayın. Tam metin araması ile, vektör eklemeleri kullanmadan anahtar sözcük eşleştirmeye göre en fazla 200 sonuç alabilirsiniz.

Python SDK standart uç noktası

Ayrıntılar için bkz. Python SDK başvurusu.

# Delta Sync Index with embeddings computed by Databricks
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "field2"],
    num_results=2
    )

# Delta Sync Index using hybrid search, with embeddings computed by Databricks
results3 = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "field2"],
    num_results=2,
    query_type="hybrid"
    )

# Delta Sync Index using full-text search (Beta)
results4 = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "field2"],
    num_results=2,
    query_type="FULL_TEXT"
    )

# Delta Sync Index with pre-calculated embeddings
results2 = index.similarity_search(
    query_vector=[0.9] * 1024,
    columns=["id", "text"],
    num_results=2
    )

Python SDK depolama için iyileştirilmiş uç nokta

Ayrıntılar için bkz. Python SDK başvurusu.

Mevcut filtre arabirimi, standart vektör arama uç noktalarında kullanılan filtre sözlüğü yerine daha SQL benzeri bir filtre dizesini benimsemek üzere depolama için iyileştirilmiş vektör arama dizinleri için yeniden tasarlanmıştır.

client = VectorSearchClient()
index = client.get_index(index_name="vector_search_demo.vector_search.en_wiki_index")

# similarity search with query vector
results = index.similarity_search(
    query_vector=[0.2, 0.33, 0.19, 0.52],
    columns=["id", "text"],
    num_results=2
)

# similarity search with query vector and filter string
results = index.similarity_search(
    query_vector=[0.2, 0.33, 0.19, 0.52],
    columns=["id", "text"],
    # this is a single filter string similar to SQL WHERE clause syntax
    filters="language = 'en' AND country = 'us'",
    num_results=2
)

REST API

REST API başvuru belgelerine bakın: POST /api/2.0/vector-search/indexes/{index_name}/query.

Databricks, üretim uygulamaları için kişisel erişim belirteçleri yerine hizmet sorumlularının kullanılmasını önerir. Geliştirilmiş güvenlik ve erişim yönetimine ek olarak, hizmet sorumlularının kullanılması sorgu başına en fazla 100 msec performansı artırabilir.

Aşağıdaki kod örneği, hizmet sorumlusu kullanarak dizini sorgulamayı gösterir.

export SP_CLIENT_ID=...
export SP_CLIENT_SECRET=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...
export WORKSPACE_ID=...

# Set authorization details to generate OAuth token
export AUTHORIZATION_DETAILS='{"type":"unity_catalog_permission","securable_type":"table","securable_object_name":"'"$INDEX_NAME"'","operation": "ReadVectorIndex"}'
# If you are using an route_optimized embedding model endpoint, then you need to have additional authorization details to invoke the serving endpoint
# export EMBEDDING_MODEL_SERVING_ENDPOINT_ID=...
# export AUTHORIZATION_DETAILS="$AUTHORIZATION_DETAILS"',{"type":"workspace_permission","object_type":"serving-endpoints","object_path":"/serving-endpoints/'"$EMBEDDING_MODEL_SERVING_ENDPOINT_ID"'","actions": ["query_inference_endpoint"]}'

# Generate OAuth token
export TOKEN=$(curl -X POST  --url $WORKSPACE_URL/oidc/v1/token -u "$SP_CLIENT_ID:$SP_CLIENT_SECRET" --data 'grant_type=client_credentials' --data 'scope=all-apis' --data-urlencode 'authorization_details=['"$AUTHORIZATION_DETAILS"']' | jq .access_token | tr -d '"')

# Get index URL
export INDEX_URL=$(curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME | jq -r '.status.index_url' | tr -d '"')

# Query vector search index.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url https://$INDEX_URL/query --data '{"num_results": 3, "query_vector": [...], "columns": [...], "debug_level": 1}'

# Query vector search index.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url https://$INDEX_URL/query --data '{"num_results": 3, "query_text": "...", "columns": [...], "debug_level": 1}'

Aşağıdaki kod örneği, kişisel erişim belirteci (PAT) kullanarak dizini sorgulamayı gösterir.

export TOKEN=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...

# Query vector search index with `query_vector`
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/query --data '{"num_results": 3, "query_vector": [...], "columns": [...], "debug_level": 1}'

# Query vector search index with `query_text`
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/query --data '{"num_results": 3, "query_text": "...", "columns": [...], "debug_level": 1}'

SQL

Önemli

vector_search() AI işlevi Herkese Açık Önizleme aşamasındadır.

yapay zeka işlevinikullanmak için vector_search işlevine bakınız.

Sorgularda filtre kullanma

Sorgu, Delta tablosundaki herhangi bir sütunu temel alan filtreler tanımlayabilir. similarity_search yalnızca belirtilen filtrelerle eşleşen satırları döndürür.

Aşağıdaki tabloda desteklenen filtreler listelenmektedir.

Filtre operatörü Davranış Örnekler
NOT Standart: Filtreyi olumsuzlar. Anahtar "DEĞİl" ile bitmelidir. Örneğin, "kırmızı" değeriyle "RENK DEĞİL" ifadesi, rengin kırmızı olmadığı belgelerle eşleşir.
Depolama için optimize edilmiş: Bkz != (bangeq işareti) işleci.
Standart: {"id NOT": 2}{“color NOT”: “red”}
Depolama için optimize edilmiş: "id != 2" "color != 'red'"
< Standart: Alan değerinin filtre değerinden küçük olup olmadığını denetler. Anahtar " <" ile bitmelidir. Örneğin, 200 değerine sahip "price <", fiyatın 200'den küçük olduğu belgelerle eşleşir.
Depolama için iyileştirilmiş: Bkz < . (lt sign) işleci.
Standart: {"id <": 200}
Depolama için optimize edilmiş: "id < 200"
<= Standart: Alan değerinin filtre değerinden küçük veya buna eşit olup olmadığını denetler. Anahtar " <=" ile bitmelidir. Örneğin, 200 değerine sahip "price <=" değeri, fiyatın 200'den küçük veya buna eşit olduğu belgelerle eşleşir.
Depolama için iyileştirilmiş: Bkz <= . (lt eq sign) işleci.
Standart: {"id <=": 200}
Depolama için optimize edilmiş: "id <= 200"
> Standart: Alan değerinin filtre değerinden büyük olup olmadığını denetler. Anahtar " >" ile bitmelidir. Örneğin, 200 değerine sahip "price >", fiyatın 200'den büyük olduğu belgelerle eşleşir.
Depolama için iyileştirilmiş: Bkz > . (gt işareti) işleci.
Standart: {"id >": 200}
Depolama için optimize edilmiş: "id > 200"
>= Standart: Alan değerinin filtre değerinden büyük veya buna eşit olup olmadığını denetler. Anahtar " >=" ile bitmelidir. Örneğin, 200 değerine sahip "price >=" değeri, fiyatın 200'den büyük veya buna eşit olduğu belgelerle eşleşir.
Depolama için optimize edilmiş: Bkz. >= (gt eq sign) operatörü.
Standart: {"id >=": 200}
Depolama için optimize edilmiş: "id >= 200"
OR Standart: Alan değerinin filtre değerlerinden herhangi biri ile eşleşip eşleşmediğini denetler. Anahtar, birden çok alt anahtarı ayırmak için OR içermelidir. Örneğin, değeri color1 OR color2 olan ["red", "blue"], ya color1'nin red olduğu ya da color2'ün blueolduğu belgelerle eşleşir.
Depolamaya yönelik optimize edilmiş: Bkz or işleç.
Standart: {"color1 OR color2": ["red", "blue"]}
Depolama için optimize edilmiş: "color1 = 'red' OR color2 = 'blue'"
LIKE Standart: Dizedeki boşlukla ayrılmış belirteçlerle eşleşir. Aşağıdaki kod örneklerine bakın.
Depolamaya yönelik optimize edilmiş: Bkz like işleç.
Standart: {"column LIKE": "hello"}
Depolama için optimize edilmiş: "column LIKE 'hello'"
Filtre işleci belirtilmedi Standart: Filtre tam eşleşmeyi denetler. Birden çok değer belirtilirse, değerlerden herhangi biri ile eşleşir.
Depolama için iyileştirilmiş: Bkz = (eq sign) işleci ve in koşulu.
Standart: {"id": 200}{"id": [200, 300]}
Depolama için iyileştirilmiş: "id = 200""id IN (200, 300)"
to_timestamp (yalnızca depolama için iyileştirilmiş uç noktalar) Depolama için iyileştirilmiş: Zaman damgasına göre filtreleyin. Bkz to_timestamp işlev Depolama için optimize edilmiş: "date > TO_TIMESTAMP('1995-01-01')"

Aşağıdaki kod örneklerine bakın:

Python SDK standart uç noktası

# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters={"title": ["Ares", "Athena"]},
    num_results=2
    )

# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters={"title OR id": ["Ares", "Athena"]},
    num_results=2
    )

# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters={"title NOT": "Hercules"},
    num_results=2
    )

Python SDK depolama için iyileştirilmiş uç nokta

# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters='title IN ("Ares", "Athena")',
    num_results=2
    )

# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters='title = "Ares" OR id = "Athena"',
    num_results=2
    )

# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters='title != "Hercules"',
    num_results=2
    )

REST API

/api/2.0/vector-search/indexes/{index_name}/query için POSTbölümüne bakın.

BEĞEN

LIKE örnekleri

{"column LIKE": "apple"}: "elma" ve "elma armutu" dizeleriyle eşleşir, ancak "ananas" veya "armut" ile eşleşmez. Unutmayın ki "pineapple" ile eşleşmez, çünkü içinde "apple" alt dizesi bulunsa bile, "apple pear" gibi boşlukla ayrılmış dizeler üzerinde tam bir eşleşme arar.

{"column NOT LIKE": "apple"} tersini yapar. "Ananas" ve "armut" ile eşleşir, ancak "elma" veya "elma armutu" ile eşleşmiyor.

Sorguda yeniden çalıştırıcıyı kullanma

Aracı performansı, sorgu için en uygun bilgilerin alınmasına bağlıdır. Yeniden boyutlandırma, alınan belgeleri, en ilgili olanları tanımlamak üzere değerlendirerek alma kalitesini geliştiren bir tekniktir. Databricks, bu belgeleri tanımlamak için araştırma tabanlı bir bileşik yapay zeka sistemi geliştirmiştir. Ayrıca, her belgenin ilgi düzeyini değerlendirirken, reranker'ın ek bağlam için kullanmasını istediğiniz meta verileri içeren sütunlar da belirtebilirsiniz.

Yeniden boyutlandırma küçük bir gecikme süresine neden olur, ancak alma kalitesini ve aracı performansını önemli ölçüde iyileştirebilir. Databricks, herhangi bir RAG aracısı kullanım örneği için yeniden boyutlandırmayı denemenizi önerir.

Bu bölümdeki örneklerde vektör arama reranker'ın nasıl kullanılacağı gösterilmektedir. Yeniden ayırıcıyı kullandığınızda, sütunları (columns) ve yeniden boyutlandırma () için kullanılacak meta veri sütunlarını ayrı ayrı döndürecek şekildecolumns_to_rerank ayarlarsınız. num_results döndürülecek son sonuç sayısıdır. Bu, yeniden boyutlandırma için kullanılan sonuç sayısını etkilemez.

Sorgu hata ayıklama iletisi, yeniden boyutlandırma adımının ne kadar sürdüğü hakkında bilgi içerir. Örneğin:

'debug_info': {'response_time': 1647.0, 'ann_time': 29.0, 'reranker_time': 1573.0}

Reranker çağrısı başarısız olursa, bu bilgiler hata ayıklama iletisine eklenir:

'debug_info': {'response_time': 587.0, 'ann_time': 331.0, 'reranker_time': 246.0, 'warnings': [{'status_code': 'RERANKER_TEMPORARILY_UNAVAILABLE', 'message': 'The reranker is temporarily unavailable. Results returned have not been processed by the reranker. Please try again later for reranked results.'}]}

Uyarı

Sütunların listelendiği columns_to_rerank sıra önemlidir. Yeniden boyutlandırma hesaplaması sütunları listelendikleri sırayla alır ve yalnızca bulduğu ilk 2000 karakteri dikkate alır.

Python SDK'sı

# Install the most recent version.
# Databricks SDK version 0.57 or above is required to use the reranker.
%pip install databricks-vectorsearch --force-reinstall
dbutils.library.restartPython()
from databricks.vector_search.reranker import DatabricksReranker

results = index.similarity_search(
    query_text = "How to create a Vector Search index",
    columns = ["id", "text", "parent_doc_summary", "date"],
    num_results = 10,
    query_type = "hybrid",
    reranker=DatabricksReranker(columns_to_rerank=["text", "parent_doc_summary", "other_column"])
    )

REST API

Gecikme süresi bilgilerini aldığınızdan emin olmak için en az 1 olarak ayarlayın debug_level .

export TOKEN=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...

curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/query --data '{"num_results": 10, "query_text": "How to create a Vector Search index", "columns": ["id", "text", "parent_doc_summary", "date"], "reranker": {"model": "databricks_reranker",
             "parameters": {
               "columns_to_rerank":
                 ["text", "parent_doc_summary"]
              }
             },
"debug_level": 1}'

Nokta bulma işlemleri

Nokta araması yapmak için herhangi bir birincil anahtar sütununda filtre kullanın.