Ricerca di oggetti di dati

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.

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)

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.

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.

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.