Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez a cikk leírja, hogyan kérdezhet le egy vektorkeresési indexet, beleértve a szűrők használatát és az újrarangsorolást.
A vektorkeresési végpontok és indexek létrehozását és lekérdezését szemléltető jegyzetfüzetek például a vektorkeresési példajegyzetfüzetekben láthatók. A referenciainformációkért tekintse meg a Python SDK-referenciát.
Installation
A vektorkeresési SDK használatához telepítenie kell azt a jegyzetfüzetbe. A csomag telepítéséhez használja a következő kódot:
%pip install databricks-vectorsearch
dbutils.library.restartPython()
Ezután a következő paranccsal importálja a VectorSearchClient:
from databricks.vector_search.client import VectorSearchClient
A hitelesítésről további információt az adatvédelem és a hitelesítés című témakörben talál.
Vektorkeresési index lekérdezése
A vektorkeresési indexet csak a Python SDK, a REST API vagy az SQL vector_search() AI függvény használatával kérdezheti le.
Megjegyzés:
Ha az indexet lekérdező felhasználó nem a vektorkeresési index tulajdonosa, a felhasználónak a következő UC-jogosultságokkal kell rendelkeznie:
- USE CATALOG a vektorkeresési indexet tartalmazó katalógusban.
- USE SCHEMA a vektorkeresési indexet tartalmazó sémán.
- SELECT a vektorkeresési indexen.
Az alapértelmezett lekérdezéstípus a ann (megközelítőleg legközelebbi szomszéd). Ha hibrid kulcsszó-hasonlósági keresést szeretne végezni, állítsa a query_type paramétert hybridértékre. Hibrid keresés esetén a rendszer az összes szöveges metaadatoszlopot tartalmazza, és legfeljebb 200 találatot ad vissza.
A reranker lekérdezésben való használatához lásd : Reranker használata egy lekérdezésben.
Fontos
A teljes szöveges keresés bétaverzióként érhető el. Teljes szöveges keresés végrehajtásához állítsa a paramétert a következőre query_typeFULL_TEXT: . A teljes szöveges kereséssel akár 200 találatot is lekérhet kulcsszóegyeztetés alapján vektoros beágyazások használata nélkül.
Python SDK standard végpont
További részletekért tekintse meg a Python SDK-referenciát.
# 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 storage-optimalizált végpont
További részletekért tekintse meg a Python SDK-referenciát.
A meglévő szűrőfelületet a tárolóoptimalizált vektorkeresési indexekhez tervezték, hogy a standard vektorkeresési végpontokban használt szűrőszótár helyett SQL-szerű szűrősztringet alkalmazzanak.
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
Lásd a REST API referenciadokumentációját: POST /api/2.0/vector-search/indexes/{index_name}/query.
Éles alkalmazások esetében a Databricks szolgáltatásnevek használatát javasolja személyes hozzáférési jogkivonatok helyett. A jobb biztonság és hozzáférés-kezelés mellett a szolgáltatásnevek használata lekérdezésenként akár 100 msec-rel is javíthatja a teljesítményt.
Az alábbi példakód bemutatja, hogyan kérdezhet le egy indexet egy szolgáltatásnév használatával.
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}'
Az alábbi kódpélda bemutatja, hogyan kérdezhet le egy indexet személyes hozzáférési jogkivonat (PAT) használatával.
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
Fontos
A vector_search() AI-függvény nyilvános előnézetben van.
A AI-függvényhasználatához lásd: vector_search függvény.
Szűrők használata lekérdezéseken
A lekérdezések a Delta tábla bármely oszlopa alapján definiálhatnak szűrőket.
similarity_search csak a megadott szűrőknek megfelelő sorokat adja vissza.
Az alábbi táblázat a támogatott szűrőket sorolja fel.
Megjegyzés:
A tárolóoptimalizált végpontok esetében az eredmények túltöltődnek. Ha az értéket num_results-ra állítja k, akkor több mint k eredményt olvas be a rendszer, és a szűrő az így lekérdezett eredményekre lesz alkalmazva. Előfordulhat, hogy a rendszer akkor sem ad vissza eredményt, ha az adathalmazban a szűrőfeltételnek megfelelő eredmények szerepelnek, ha a dokumentumok pontszáma nem szerepel az első helyen.
| Szűrő operátor | Magatartás | Példák |
|---|---|---|
NOT |
Standard: Negálja a szűrőt. A kulcsnak "NOT" végződéssel kell végződnie. Például a "color NOT" értéke "piros" egyezik meg olyan dokumentumokkal, ahol a szín nem piros. Tárolóoptimalizált: Lásd a != (bangeq sign) operátort. |
Standard: {"id NOT": 2}{“color NOT”: “red”}Tárolóoptimalizált: "id != 2" "color != 'red'" |
< |
Standard: Ellenőrzi, hogy a mező értéke kisebb-e a szűrőértéknél. A kulcsnak "<" végződéssel kell végződnie. A 200-as értékkel rendelkező "price <" például megegyezik azokkal a dokumentumokkal, ahol az ár kisebb, mint 200. Tárolóoptimalizált: Lásd < az (lt sign) operátort. |
Standard: {"id <": 200}Tárolóoptimalizált: "id < 200" |
<= |
Standard: Ellenőrzi, hogy a mező értéke kisebb vagy egyenlő-e a szűrőértéknél. A kulcsnak "<=" végződéssel kell végződnie. A 200-as értékkel rendelkező "price <=" például megegyezik azokkal a dokumentumokkal, ahol az ár kisebb vagy egyenlő 200-nál. Tárolóoptimalizált: Lásd <= az (lt eq sign) operátort. |
Standard: {"id <=": 200}Tárolóoptimalizált: "id <= 200" |
> |
Standard: Ellenőrzi, hogy a mező értéke nagyobb-e a szűrőértéknél. A kulcsnak ">" végződéssel kell végződnie. A 200-as értékkel rendelkező "price >" például megegyezik azokkal a dokumentumokkal, ahol az ár nagyobb, mint 200. Tárolóoptimalizált: Lásd > a (gt sign) operátort. |
Standard: {"id >": 200}Tárolóoptimalizált: "id > 200" |
>= |
Standard: Ellenőrzi, hogy a mező értéke nagyobb vagy egyenlő-e a szűrőértéknél. A kulcsnak ">=" végződéssel kell végződnie. A 200-as értékkel rendelkező "price >=" például megegyezik azokkal a dokumentumokkal, ahol az ár nagyobb vagy egyenlő 200-nál. Tárolóoptimalizált: Lásd az >=(gt eq sign) operátort. |
Standard: {"id >=": 200}Tárolóoptimalizált: "id >= 200" |
OR |
Standard: Ellenőrzi, hogy a mező értéke megfelel-e valamelyik szűrőértéknek. A kulcsnak OR kell tartalmaznia több alkulcs elkülönítéséhez. Például a color1 OR color2 értékkel rendelkező ["red", "blue"] akkor egyezik a dokumentumokkal, ha color1red, vagy color2blue.Tárolásra optimalizált: Lásd a or operátort. |
Standard: {"color1 OR color2": ["red", "blue"]}Tárolóoptimalizált: "color1 = 'red' OR color2 = 'blue'" |
LIKE |
Standard: Megfelel a szóközzel elválasztott tokeneknek egy karakterláncban. Tárolásra optimalizált: Lásd a like operátort. |
Lásd : Megjegyzések a használati adatokhoz LIKE. |
| Nincs megadva szűrőoperátor |
Standard: A szűrő pontos egyezést keres. Ha több érték van megadva, az bármelyik értéknek megfelel. Tárolóoptimalizált: Lásd = az (eq sign) operátort és in a predikátumot. |
Standard: {"id": 200}{"id": [200, 300]}Tárolóoptimalizált: "id = 200""id IN (200, 300)" |
to_timestamp (csak tárolóoptimalizált végpontok) |
Tárolóoptimalizált: Szűrés időbélyeg alapján. Lásd to_timestamp függvény |
Tárolóoptimalizált: "date > TO_TIMESTAMP('1995-01-01')" |
A LIKE használatával kapcsolatos megjegyzések
LIKE példák standard végpontokra
{"column LIKE": "apple"}: megegyezik az "apple" és az "apple pear" sztringekkel, de nem egyezik az "ananász" sztringekkel. Vegye figyelembe, hogy nem egyezik az "ananász" kifejezéssel, annak ellenére, hogy egy "alma" alsztringet tartalmaz – szó szerinti egyezést keres csakis a külön szóközzel elválasztott kifejezésekkel, mint például az "alma körte".
{"column NOT LIKE": "apple"} az ellenkezőjét teszi. Az "ananász" és a "körte" megegyezik, de az "alma" vagy az "alma körte" nem felel meg.
LIKE példák a tárolás-optimalizált végpontok
| Formátum | Egyezések |
|---|---|
"column LIKE 'apple'" |
Az operátorral = egyenértékű. Csak pontos egyezéseket ad vissza. |
"column LIKE 'apple%'" |
Olyan sorokat ad vissza, ahol egy előtag egyezik apple, például applepie. |
"column LIKE '%apple'" |
Olyan sorokat ad vissza, ahol egy utótag egyezik apple, például pineapple. |
"column LIKE '%apple%'" |
Olyan sorokat ad vissza, amelyek egyező alsztringekkel applerendelkeznek, például pineapplecake. |
Példakódok
Python SDK standard végpont
# 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 storage-optimalizált végpont
# 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
Lásd: POST /api/2.0/vector-search/indexes/{index_name}/query.
A reranker használata lekérdezésben
Az ügynök teljesítménye a lekérdezés legfontosabb információinak lekérésétől függ. A reranking egy olyan technika, amely javítja a lekérési minőséget azáltal, hogy kiértékeli a lekért dokumentumokat, hogy azonosítsa a szemantikailag legrelevánsabb dokumentumokat. A Databricks kifejlesztett egy kutatásalapú összetett AI-rendszert ezeknek a dokumentumoknak a azonosítására. Megadhatja azokat a metaadatokat tartalmazó oszlopokat is, amelyeket a reranker további környezethez szeretne használni, mivel az értékeli az egyes dokumentumok relevanciáját.
A reranking kis késéssel jár, de jelentősen javíthatja a lekérési minőséget és az ügynök teljesítményét. A Databricks azt javasolja, hogy próbálja ki az újrapróbálkozást minden RAG-ügynök használati esetnél.
Az ebben a szakaszban szereplő példák bemutatják, hogyan használható a vektorkeresési reranker. A reranker használata esetén az oszlopokat külön-külön adja vissza (columns) és a metaadatoszlopokat az újraküldéshez (columns_to_rerank).
num_results a visszaadni kívánt eredmények végső száma. Ez nem befolyásolja az újraküldéshez használt eredmények számát.
A lekérdezés hibakeresési üzenete információkat tartalmaz arról, hogy mennyi ideig tartott az újraküldési lépés. Például:
'debug_info': {'response_time': 1647.0, 'ann_time': 29.0, 'reranker_time': 1573.0}
Ha a reranker-hívás meghiúsul, a hibakeresési üzenet a következő információkat tartalmazza:
'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.'}]}
Megjegyzés:
Az oszlopok felsorolásának columns_to_rerank sorrendje fontos. A reranking számítás a lista szerinti sorrendbe veszi az oszlopokat, és csak az első 2000 karaktert veszi figyelembe.
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
A késési adatok lekérésének biztosítása érdekében állítsa debug_level be legalább 1 értékre.
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}'
Pontkeresések
Pontkereséshez használjon szűrőt bármely elsődleges kulcsoszlopon.