Rechercher des objets de données

L'API Search permet de trouver des objets de données semblables à une requête donnée et de renvoyer une liste de résultats classés (par similarité). L'API Search accepte également le filtrage.

L'API Search propose différentes méthodes pour rechercher des objets de données : recherche vectorielle, recherche en texte intégral et recherche sémantique. De plus, plusieurs recherches de n'importe quel type peuvent être combinées pour obtenir une recherche hybride.

La recherche vectorielle vous permet de fournir votre propre vecteur de requête. Il s'agit de la méthode requise pour rechercher des champs d'embedding qui ne comportent pas de embedding-config. Si plusieurs champs search_vector sont fournis, les résultats sont combinés à l'aide de pondérations égales.

L'exemple suivant montre comment effectuer une recherche vectorielle sur une collection dont l'ID est movies.

curl -X POST \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/movies/dataObjects:search' \
  -H '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": "*" \
      } \
    } \
  }'

Cela effectue une recherche en texte intégral sans vecteurs creux. Le dialecte de requête "word" par défaut traite l'intégralité de l'entrée comme des termes de recherche individuels avec un opérateur AND implicite. Vous pouvez définir enhanced_query sur true pour étendre les termes de recherche, gérer la recherche de radical, supprimer les mots vides et autoriser des opérateurs de recherche supplémentaires :

  • OR : opérateur de disjonction sensible à la casse qui correspond aux documents contenant au moins l'un des termes spécifiés. Elle ne s'applique qu'aux deux termes adjacents.

  • " : (guillemets doubles) pour la recherche d'expressions.

  • - : opérateur de négation. Il exclut les documents contenant les termes devant lesquels il est placé.

Cette recherche convertit votre requête textuelle en embeddings pour trouver des résultats basés sur la signification sémantique. Il utilise le embedding-config défini dans votre schéma pour générer l'embedding de requête. Si plusieurs champs search_vector sont fournis, les résultats sont combinés à l'aide de pondérations égales.

Utilisez batch_search_data_objects pour exécuter plusieurs recherches en parallèle (recherche vectorielle, recherche textuelle et recherche sémantique), et combinez et classez éventuellement les résultats à l'aide d'un classeur.

Les classeurs suivants sont disponibles :

  • ReciprocalRankFusion : fusionne les ensembles de résultats à l'aide de l'algorithme de fusion de classement réciproque (RRF).

  • VertexRanker : utilise l'API Vertex Ranking pour fusionner et classer les résultats.