Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du kör frågor mot ett vektorsökindex, inklusive hur du använder filter och omrankning.
Exempelnotebooks som visar hur du skapar och söker efter slutpunkter och index för vektorsökning finns i Exempelnotebooks för vektorsökning. Referensinformation finns i Python SDK-referensen.
Installation
Om du vill använda SDK för vektorsökning måste du installera det i din notebook. Använd följande kod för att installera paketet:
%pip install databricks-vectorsearch
dbutils.library.restartPython()
Använd sedan följande kommando för att importera VectorSearchClient:
from databricks.vector_search.client import VectorSearchClient
Information om autentisering finns i Dataskydd och autentisering.
Utföra frågor på ett vektorsökningsindex
Du kan bara köra frågor mot vektorsökningsindexet med hjälp av Python SDK, REST API eller SQL vector_search() AI-funktionen.
Anmärkning
Om användaren som frågar indexet inte är ägare till vektorsökningsindexet måste användaren ha följande UC-behörigheter:
- USE CATALOG i katalogen som innehåller vektorsökningsindexet.
- USE SCHEMA i schemat som innehåller vektorsökningsindexet.
- SELECT på vektorsökningsindexet.
Standardfrågetypen är ann (ungefärlig närmaste granne). Om du vill utföra en hybridsökning med nyckelordslikhet anger du parametern query_type till hybrid. Med hybridsökning inkluderas alla textmetadatakolumner och högst 200 resultat returneras.
Information om hur du använder reranker i en fråga finns i Använda reranker i en fråga.
Viktigt!
Fulltextsökning är tillgänglig som en betafunktion. Om du vill utföra en fulltextsökning anger du parametern query_type till FULL_TEXT. Med fulltextsökning kan du hämta upp till 200 resultat baserat på nyckelordsmatchning utan att använda vektorinbäddningar.
Standardslutpunkt för Python SDK
Mer information finns i Python SDK-referensen.
# 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-lagringsoptimerad slutpunkt
Mer information finns i Python SDK-referensen.
Det befintliga filtergränssnittet har utformats på nytt för lagringsoptimerade vektorsökningsindex för att införa en mer SQL-liknande filtersträng i stället för filterordlistan som används i standardvektorsökningsslutpunkter.
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
Se referensdokumentation för REST API: POST /api/2.0/vector-search/indexes/{index_name}/query.
För produktionsprogram rekommenderar Databricks att du använder tjänstens huvudnamn i stället för personliga åtkomsttoken. Förutom förbättrad säkerhets- och åtkomsthantering kan användning av tjänstens huvudnamn förbättra prestanda med upp till 100 msec per fråga.
Följande kodexempel illustrerar hur du gör förfrågningar mot ett index med hjälp av en tjänstprincip.
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}'
I följande kodexempel visas hur du kör frågor mot ett index med hjälp av en personlig åtkomsttoken (PAT).
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
Viktigt!
Funktionen vector_search() AI finns i offentlig förhandsversion.
Information om hur du använder den här AI-funktionen finns i vector_search funktion.
Använda filter på frågor
En fråga kan definiera filter baserat på valfri kolumn i Delta-tabellen.
similarity_search returnerar endast rader som matchar de angivna filtren.
I följande tabell visas de filter som stöds.
| Filteroperatorn | Beteende | Examples |
|---|---|---|
NOT |
Standard: Negerar filtret. Nyckeln måste sluta med "NOT". Till exempel matchar "color NOT" med värdet "red" dokument där färgen inte är röd. Lagringsoptimerad: Se != operatorn (bangeq-tecken). |
Standard: {"id NOT": 2}{“color NOT”: “red”}Lagringsoptimerad: "id != 2" "color != 'red'" |
< |
Standard: Kontrollerar om fältvärdet är mindre än filtervärdet. Nyckeln måste sluta med " <". Till exempel matchar "pris <" med värdet 200 dokument där priset är mindre än 200. Lagringsoptimerad: Se (lt sign) operatorn <. |
Standard: {"id <": 200}Lagringsoptimerad: "id < 200" |
<= |
Standard: Kontrollerar om fältvärdet är mindre än eller lika med filtervärdet. Nyckeln måste sluta med " <=". Till exempel matchar "pris <=" med värdet 200 dokument där priset är mindre än eller lika med 200. Lagringsoptimerad: Se <=. |
Standard: {"id <=": 200}Lagringsoptimerad: "id <= 200" |
> |
Standard: Kontrollerar om fältvärdet är större än filtervärdet. Nyckeln måste sluta med " >". Till exempel matchar "pris >" med värdet 200 dokument där priset är större än 200. Lagringsoptimerad: Se > operatorn (gt sign). |
Standard: {"id >": 200}Lagringsoptimerad: "id > 200" |
>= |
Standard: Kontrollerar om fältvärdet är större än eller lika med filtervärdet. Nyckeln måste sluta med " >=". Till exempel matchar "pris >=" med värdet 200 dokument där priset är större än eller lika med 200. Lagringsoptimerad: Se >=-operatorn (gt eq sign). |
Standard: {"id >=": 200}Lagringsoptimerad: "id >= 200" |
OR |
Standard: Kontrollerar om fältvärdet matchar något av filtervärdena. Nyckeln måste innehålla OR för att avgränsa flera undernycklar. Till exempel matchar color1 OR color2 med värdet ["red", "blue"] dokument där antingen color1 är red eller color2blue.Lagringsoptimerad: Se or operatorn. |
Standard: {"color1 OR color2": ["red", "blue"]}Lagringsoptimerad: "color1 = 'red' OR color2 = 'blue'" |
LIKE |
Standard: Matchar blankstegsavgränsade token i en sträng. Se kodexemplen nedan. Lagringsoptimerad: Se like operatorn. |
Standard: {"column LIKE": "hello"}Lagringsoptimerad: "column LIKE 'hello'" |
| Ingen filteroperator är angiven. |
Standard: Filterkontrollerar för en exakt matchning. Om flera värden anges matchar det något av värdena. Lagringsoptimerad: Se = operatorn (eq sign) och in predikatet. |
Standard: {"id": 200}{"id": [200, 300]}Lagringsoptimerad: "id = 200""id IN (200, 300)" |
to_timestamp (endast lagringsoptimerade slutpunkter) |
Lagringsoptimerad: Filtrera på en tidsstämpel. Se to_timestamp funktion |
Lagringsoptimerad: "date > TO_TIMESTAMP('1995-01-01')" |
Se följande kodexempel:
Standardslutpunkt för Python SDK
# 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-lagringsoptimerad slutpunkt
# 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
Se POST /api/2.0/vector-search/indexes/{index_name}/query.
LIKE
LIKE Exempel
{"column LIKE": "apple"}: matchar strängarna "apple" och "apple pear" men matchar inte "ananas" eller "päron". Observera att den inte matchar "ananas" även om den innehåller en substring "apple" --- den letar efter en exakt matchning mellan blankstegsavgränsade tokens som i "äpple päron".
{"column NOT LIKE": "apple"} gör motsatsen. Den matchar "ananas" och "päron" men matchar inte "äpple" eller "äppelpäron".
Använda rerankern i en fråga
Agentprestanda beror på hur du hämtar den mest relevanta informationen för en fråga. Reranking är en teknik som förbättrar hämtningskvaliteten genom att utvärdera de hämtade dokumenten för att identifiera de som är semantiskt mest relevanta. Databricks har utvecklat ett forskningsbaserat sammansatt AI-system för att identifiera dessa dokument. Du kan också ange kolumner som innehåller metadata som du vill att rerankern ska använda för ytterligare kontext när den utvärderar varje dokuments relevans.
Att ändra rangordning medför en liten fördröjning, men kan avsevärt förbättra hämtningskvaliteten och agentprestandan. Databricks rekommenderar att du provar att ändra rangordning för alla RAG-agentanvändningsfall.
Exemplen i det här avsnittet visar hur du använder vektorsökningsrerankern. När du använder reranker anger du att kolumnerna ska returnera (columns) och de metadatakolumner som ska användas för att ändra rangordning (columns_to_rerank) separat.
num_results är det slutliga antalet resultat som ska returneras. Detta påverkar inte antalet resultat som används för att ändra rangordning.
Frågefelsökningsmeddelandet innehåller information om hur lång tid det tog att ändra rangordning. Till exempel:
'debug_info': {'response_time': 1647.0, 'ann_time': 29.0, 'reranker_time': 1573.0}
Om reranker-anropet misslyckas inkluderas den informationen i felsökningsmeddelandet:
'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.'}]}
Anmärkning
Den ordning som kolumnerna visas i columns_to_rerank är viktig. Beräkningen för omrankning tar kolumnerna i den ordning de visas och tar endast hänsyn till de första 2 000 tecken som hittas.
Python SDK
# 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
För att säkerställa att du får svarstidsinformation anger du debug_level till minst 1.
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}'
Punktsökningar
Om du vill göra en punktsökning använder du ett filter på valfri primärnyckelkolumn.