Pesquisar objetos de dados

O objetivo da API Search é encontrar objetos de dados semelhantes a uma determinada consulta e retornar uma lista de resultados classificados por similaridade. A API Search também oferece suporte à filtragem.

A API Search oferece várias maneiras de pesquisar objetos de dados: pesquisa vetorial, pesquisa de texto completo e pesquisa semântica. Além disso, várias pesquisas de qualquer tipo podem ser combinadas para criar uma pesquisa híbrida.

Com a pesquisa vetorial, você pode fornecer seu próprio vetor de consulta. Esse é o método obrigatório para pesquisar campos de incorporação que não têm um embedding-config. Se vários campos search_vector forem fornecidos, os resultados serão combinados usando ponderações iguais.

O exemplo a seguir demonstra como realizar uma pesquisa vetorial em uma coleção com o 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)

Isso realiza uma pesquisa de texto completo sem vetores esparsos. O dialeto padrão de consulta "word" trata toda a entrada como termos de pesquisa individuais com um operador AND implícito. Você pode definir enhanced_query como true para expandir os termos de pesquisa, processar a derivação, remover palavras irrelevantes e permitir outros operadores de pesquisa:

  • OR: um operador de disjunção que diferencia maiúsculas de minúsculas e corresponde a documentos que contêm pelo menos um dos termos especificados. Ela só se aplica aos dois termos adjacentes.

  • ": (aspas duplas) para pesquisa de frases.

  • -: o operador de negação. Ele exclui documentos que contêm termos antes dele.

Essa pesquisa converte sua consulta de texto em embeddings para encontrar resultados com base no significado semântico. Ele usa o embedding-config definido no seu esquema para gerar o embedding de consulta. Se vários campos search_vector forem fornecidos, os resultados serão combinados usando ponderações iguais.

Use batch_search_data_objects para executar várias pesquisas em paralelo (vetorial, de texto e semântica) e, se quiser, combine e classifique os resultados usando um classificador.

Os seguintes classificadores estão disponíveis:

  • ReciprocalRankFusion:mescla conjuntos de resultados usando o algoritmo de fusão de classificação recíproca (RRF, na sigla em inglês).

  • VertexRanker:usa a API Vertex Ranking para mesclar e classificar resultados.