Lo scopo dell'API Search è trovare oggetti di dati simili a una determinata query e restituire un elenco di risultati classificati (in base alla somiglianza). L'API Search supporta anche il filtraggio.
L'API Search offre diversi modi per cercare oggetti di dati: ricerca vettoriale, ricerca a testo intero e ricerca semantica. Inoltre, più ricerche di qualsiasi tipo possono essere combinate per ottenere una ricerca ibrida.
Ricerca vettoriale
La ricerca vettoriale ti consente di fornire il tuo vettore di query. Questo è il metodo
obbligatorio per la ricerca di campi di incorporamento che non hanno un embedding-config.
Se vengono forniti più campi search_vector, i risultati vengono combinati utilizzando
pesi uguali.
L'esempio seguente mostra come eseguire una ricerca vettoriale su una raccolta con l'ID COLLECTION_ID.
REST
curl -X POST \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H 'Content-Type: application/json' \
-d '{
"vector_search": {
"search_field": "plot_embedding",
"vector": {
"values": [
0.42426406871192845,
0.565685424949238,
0.7071067811865475
]
},
"filter": {
"genre": {
"$eq": "Thriller"
}
},
"top_k": 5,
"output_fields": {
"data_fields": "*",
"vector_fields": "*",
"metadata_fields": "*"
}
}
}'
Python
from google.cloud import vectorsearch_v1beta
# Create the client
data_object_search_service_client = vectorsearch_v1beta.DataObjectSearchServiceClient()
# Initialize request
vector_search = vectorsearch_v1beta.VectorSearch(
search_field="plot_embedding",
vector={"values": [0.1, 0.2, 0.3]},
filter={"genre": {"$eq": "Thriller"}},
top_k=5,
)
request = vectorsearch_v1beta.SearchDataObjectsRequest(
parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
vector_search=vector_search,
)
# Make the request
response = data_object_search_service_client.search_data_objects(request=request)
# Handle the response
print(response)
Ricerca testo
Esegue la ricerca a testo intero senza vettori sparsi. Il dialetto di query "parola" predefinito
tratta l'intero input come singoli termini di ricerca con un operatore
AND implicito. Puoi impostare enhanced_query su true per espandere i termini di ricerca,
gestire le variazioni, rimuovere le stop word e consentire operatori di ricerca aggiuntivi:
OR: un operatore di disgiunzione sensibile alle maiuscole che corrisponde ai documenti contenenti almeno uno dei termini specificati. Si applica solo ai due termini adiacenti.": (virgolette doppie) per la ricerca di frasi.-: l'operatore di negazione. Esclude i documenti che contengono i termini che lo precedono.
Ricerca semantica
Questa ricerca converte la query di testo in embedding per trovare risultati basati sul significato semantico. Utilizza embedding-config definito nello schema per
generare l'incorporamento della query. Se vengono forniti più campi search_vector,
i risultati vengono combinati utilizzando pesi uguali.
Ricerca con la ricerca ibrida
Utilizza batch_search_data_objects per eseguire più ricerche in parallelo
(ricerca vettoriale, ricerca di testo e ricerca semantica) e, facoltativamente, combinare
e classificare i risultati utilizzando un classificatore.
Sono disponibili i seguenti Ranker:
ReciprocalRankFusion: unisce i set di risultati utilizzando l'algoritmo Reciprocal Rank Fusion (RFF).VertexRanker: utilizza l'API Vertex Ranking per unire e classificare i risultati.