Mettre à jour et recompiler un index actif

Avec des requêtes de recherche volumineuses, la mise à jour de vos index est importante pour toujours disposer des informations les plus précises. Vous pouvez mettre à jour vos index Vector Search de différentes manières :

Remplacer un index entier

Pour remplacer le contenu d'une mise à jour groupée ou d'un Index en continu existants, utilisez la méthode IndexService.UpdateIndex.

  • Définissez Index.metadata.contentsDeltaUri sur l'URI Cloud Storage incluant les vecteurs que vous souhaitez mettre à jour.
  • Définissez Index.metadata.isCompleteOverwrite sur "true". Lorsque ce champ est défini sur "true", l'intégralité de l'index est complètement remplacée par le nouveau fichier de métadonnées que vous fournissez.

gcloud

  1. Mettez à jour le fichier de métadonnées de votre index pour définir contentsDeltaUri et isCompleteOverwrite=true.
  2. Exécutez la commande gcloud ai indexes update.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • LOCAL_PATH_TO_METADATA_FILE : chemin d'accès local au fichier de métadonnées.
  • INDEX_ID : ID de l'index.
  • LOCATION : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : ID de votre projet Google Cloud .

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud ai indexes update INDEX_ID \
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes update INDEX_ID `
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes update INDEX_ID ^
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • INPUT_DIR : chemin d'accès au répertoire Cloud Storage du contenu de l'index.
  • INDEX_ID : ID de l'index.
  • LOCATION : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : ID de votre projet Google Cloud .
  • PROJECT_NUMBER : numéro de projet généré automatiquement pour votre projet.

Méthode HTTP et URL :

PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID

Corps JSON de la requête :

{
 "metadata": {
   "contentsDeltaUri": "INPUT_DIR",
   "isCompleteOverwrite": true
 }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-12T23:56:14.480948Z",
     "updateTime": "2022-01-12T23:56:14.480948Z"
   }
 }
}

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

Lorsque vous appelez la méthode ci-dessous, définissez is_complete_overwrite=True pour remplacer entièrement le contenu de l'index.

def vector_search_update_index_embeddings(
    project: str,
    location: str,
    index_name: str,
    gcs_uri: str,
    is_complete_overwrite: Optional[bool] = None,
) -> None:
    """Update a vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        gcs_uri (str): Required. The Google Cloud Storage uri for index content
        is_complete_overwrite (bool): Optional. If true, the index content will
          be overwritten wth the contents at gcs_uri.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    index.update_embeddings(
        contents_delta_uri=gcs_uri, is_complete_overwrite=is_complete_overwrite
    )

Console

Suivez ces instructions pour mettre à jour le contenu d'un index par lot.

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la section Déployer et utiliser. Sélectionnez Vector Search.

    Accéder à "Recherche vectorielle"

  2. Sélectionnez l'index que vous souhaitez mettre à jour. La page Informations sur l'index s'affiche.
  3. Sélectionnez Modifier l'index. Un volet de modification d'index s'ouvre.
  4. Dans le champ Cloud Storage, recherchez et sélectionnez le dossier Cloud Storage dans lequel vos données vectorielles sont stockées.
  5. Cochez la case d'écrasement complet pour écraser toutes les données existantes.
  6. Cliquez sur Mettre à jour.
  7. Cliquez sur Terminé pour fermer le panneau.

Mettre à jour partiellement un index par lot

Pour mettre à jour les embeddings d'un Index par lot existant, utilisez la méthode IndexService.UpdateIndex.

  • Définissez Index.metadata.contentsDeltaUri sur l'URI Cloud Storage incluant les vecteurs que vous souhaitez mettre à jour.
  • Définissez Index.metadata.isCompleteOverwrite sur "false".

Seuls les vecteurs spécifiés dans Index.metadata.contentsDeltaUri sont mis à jour, insérés ou supprimés. Les autres embeddings existants dans l'index sont conservés.

gcloud

  1. Mettez à jour le fichier de métadonnées de votre index pour définir contentsDeltaUri.
  2. Exécutez la commande gcloud ai indexes update.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • LOCAL_PATH_TO_METADATA_FILE : chemin d'accès local au fichier de métadonnées.
  • INDEX_ID : ID de l'index.
  • LOCATION : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : ID de votre projet Google Cloud .

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud ai indexes update INDEX_ID \
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes update INDEX_ID `
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes update INDEX_ID ^
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • INPUT_DIR : chemin d'accès au répertoire Cloud Storage du contenu de l'index.
  • INDEX_ID : ID de l'index.
  • LOCATION : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : ID de votre projet Google Cloud .
  • PROJECT_NUMBER : numéro de projet généré automatiquement pour votre projet.

Méthode HTTP et URL :

PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID

Corps JSON de la requête :

{
 "metadata": {
   "contentsDeltaUri": "INPUT_DIR",
   "isCompleteOverwrite": false
 }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-12T23:56:14.480948Z",
     "updateTime": "2022-01-12T23:56:14.480948Z"
   }
 }
}

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

Lorsque vous appelez la méthode ci-dessous, définissez is_complete_overwrite=False.

def vector_search_update_index_embeddings(
    project: str,
    location: str,
    index_name: str,
    gcs_uri: str,
    is_complete_overwrite: Optional[bool] = None,
) -> None:
    """Update a vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        gcs_uri (str): Required. The Google Cloud Storage uri for index content
        is_complete_overwrite (bool): Optional. If true, the index content will
          be overwritten wth the contents at gcs_uri.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    index.update_embeddings(
        contents_delta_uri=gcs_uri, is_complete_overwrite=is_complete_overwrite
    )

Console

Suivez ces instructions pour mettre à jour le contenu d'un index par lot.

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la section Déployer et utiliser. Sélectionnez Vector Search.

    Accéder à "Recherche vectorielle"

  2. Sélectionnez l'index que vous souhaitez mettre à jour. La page Informations sur l'index s'affiche.
  3. Sélectionnez Modifier l'index. Un volet de modification d'index s'ouvre.
  4. Dans le champ Cloud Storage, recherchez et sélectionnez le dossier Cloud Storage dans lequel vos données vectorielles sont stockées.
  5. Assurez-vous que la case d'écrasement complet est décochée.
  6. Cliquez sur Mettre à jour.
  7. Cliquez sur Terminé pour fermer le panneau.

Si des déploiements sont associés à l'Index (voir le champ Index.deployed_indexes), lorsque des modifications de l'Index d'origine sont en cours, la propriété DeployedIndex est automatiquement mise à jour de manière asynchrone en arrière-plan pour refléter ces changements.

Pour vérifier que la modification a été propagée, comparez l'heure de fin de l'opération de mise à jour de l'index et la valeur DeployedIndex.index_sync_time.

Mettre à jour partiellement un index en continu

Avec les mises à jour en continu, vous pouvez mettre à jour et interroger votre index en quelques secondes. Pour le moment, vous ne pouvez pas utiliser les mises à jour en continu sur un index de mise à jour groupée existant. Vous devez donc créer un index. Pour en savoir plus, consultez la section Créer un index pour la mise à jour en continu.

Vous êtes facturé 0,45 $ par Go utilisé pour les mises à jour en continu. Pour connaître le détail des tarifs, consultez la page Tarification de Vertex AI. Les mises à jour en continu sont directement appliquées aux index déployés en mémoire, qui sont ensuite reflétés dans les résultats de la requête après un court délai.

Faire un upsert sur des points de données

Utilisez ces exemples pour voir comment faire un upsert sur un point de données. N'oubliez pas que upsert-datapoints accepte les formats JSON sous forme de tableau uniquement.

Python

Python

def vector_search_upsert_datapoints(
    project: str,
    location: str,
    index_name: str,
    datapoints: Sequence[aiplatform.compat.types.index_v1beta1.IndexDatapoint],
) -> None:
    """Upsert datapoints to the index.

    Args:
      project (str): Required. The Project ID
      location (str): Required. The region name, e.g. "us-central1"
      index_name (str): Required. The index to update. A fully-qualified index
        resource name or a index ID.  Example:
        "projects/123/locations/us-central1/indexes/my_index_id" or
        "my_index_id".
      datapoints: Sequence[IndexDatapoint]: Required. The datapoints to be
        updated. For example:
        [IndexDatapoint(datapoint_id="1", feature_vector=[1.0, 2.0, 3.0]),
        IndexDatapoint(datapoint_id="2", feature_vector=[4.0, 5.0, 6.0])]
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index with stream_update
    # enabled
    my_index = aiplatform.MatchingEngineIndex(index_name=index_name)

    # Upsert the datapoints to the index
    my_index.upsert_datapoints(datapoints=datapoints)

Curl

La limite de quota de débit concerne la quantité de données incluse dans une opération upsert. Si l'ID de point de données existe dans l'index, l'embedding est mis à jour. Dans le cas contraire, un nouvel embedding est ajouté.

  
  DATAPOINT_ID_1=
  DATAPOINT_ID_2=
  curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
  -d '{datapoints: [{datapoint_id: "'${DATAPOINT_ID_1}'", feature_vector: [...]},
  {datapoint_id: "'${DATAPOINT_ID_2}'", feature_vector: [...]}]}'
  
  

Avec la recherche hybride, les embeddings creux et denses pour un point de données sont pris en charge. Dans une opération upsert, l'omission d'un embedding dense supprime la représentation dense, et l'omission d'un embedding creux supprime la représentation creuse.

Cet exemple met à jour des embeddings denses et des embeddings creux.

  
    curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`"  https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints -d '{datapoints: [{datapoint_id: "111", feature_vector: [0.111, 0.111], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}}]}'
  
  

Cet exemple met à jour les embeddings denses et supprime les embeddings creux.

    
      curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`"  https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints -d '{datapoints: [{datapoint_id: "111", feature_vector: [0.111, 0.111]}]}'
    
  

Cet exemple met à jour les embeddings creux et supprime les embeddings denses.

    
      curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`"  https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints -d '{datapoints: [{datapoint_id: "111",  "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}}]}'
    
  

Console

Console

Suivez les instructions ci-dessous pour mettre à jour du contenu vers un index en continu.

  1. Dans la console Google Cloud , accédez à la page Recherche vectorielle.

    Accéder à "Recherche vectorielle"

  2. Sélectionnez l'index que vous souhaitez mettre à jour. La page Informations sur l'index s'affiche.
  3. Cliquez sur Modifier l'index. Un volet de modification d'index s'ouvre.
  4. Dans le volet, sélectionnez l'onglet Faire l'upsert d'un point de données pour ajouter du contenu.
  5. Saisissez l'ID du point de données.
  6. Saisissez au moins un type d'embedding :
    • Embedding dense : saisissez un tableau de valeurs à virgule flottante séparées par une virgule. Le nombre de valeurs doit correspondre aux dimensions de l'index.
    • Embedding creux :
      1. Saisissez les dimensions de l'embedding creux sous la forme d'un tableau d'entiers séparés par une virgule. Le nombre de valeurs ne doit pas nécessairement correspondre aux dimensions de l'index.
      2. Saisissez les valeurs sous la forme d'un tableau de valeurs à virgule flottante séparées par une virgule. Le nombre de valeurs doit correspondre au nombre de dimensions de l'embedding creux.
  7. Facultatif : Pour activer le filtrage par restriction de jeton sur ce point de données, cliquez sur Ajouter une restriction de jeton, puis saisissez un espace de noms et des chaînes séparées par une virgule en tant que jetons.
  8. Facultatif : Pour activer le filtrage par restrictions numériques sur ce point de données, cliquez sur Ajouter une restriction numérique, saisissez un espace de noms, sélectionnez un type de nombre, puis saisissez une valeur.
  9. Facultatif : Pour éviter d'obtenir de nombreux résultats similaires, saisissez une chaîne de tag de regroupement.
  10. Cliquez sur Faire un upsert.
  11. Cliquez sur Terminé pour fermer le panneau.

La limite de quota de débit concerne la quantité de données incluse dans une opération upsert. Si l'ID de point de données existe dans l'index, l'embedding est mis à jour. Dans le cas contraire, un nouvel embedding est ajouté.

Mettre à jour les métadonnées des embeddings

Vous pouvez être amené à mettre à jour les restrictions de flux ou les restrictions numériques pour différentes raisons. Par exemple, lorsque vous traitez un volume important de données évoluant rapidement, vous pouvez donner la priorité à certains flux de données. La mise à jour directe des restrictions ou des restrictions numériques vous permet d'affiner le centre d'intérêt en temps réel, garantissant ainsi que les données les plus importantes sont traitées ou mises en évidence immédiatement.

Vous pouvez mettre à jour directement les restrictions de points de données et les restrictions numériques dans un index en continu sans le coût de compactage d'une mise à jour complète.

Pour effectuer ces mises à jour exclusivement sur les métadonnées, vous devez ajouter le champ update_mask à la requête. La valeur de update_mask doit être définie sur all_restricts. Les valeurs de restriction et de restriction numérique définies dans les points de données doivent correspondre aux nouvelles valeurs que vous souhaitez appliquer dans la mise à jour.

L'exemple suivant montre comment ajouter des restrictions à deux points de données existants.

DATAPOINT_ID_1=
DATAPOINT_ID_2=

curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
-d '{datapoints:
[{datapoint_id: "'${DATAPOINT_ID_1}'", feature_vector: [...],  restricts:[{namespace: "color", allow_list: ["red"]}]},
{datapoint_id: "'${DATAPOINT_ID_2}'", feature_vector: [...],  restricts:[{namespace: "color", allow_list: ["red"]}]}
], update_mask: "all_restricts"}'

Supprimer des points de données

Vous devrez peut-être supprimer des points de données de votre index en continu. Pour cela, vous pouvez utiliser curl ou la console Google Cloud .

Un cas d'utilisation clé pour la suppression d'un point de données d'un index consiste à maintenir la parité entre l'index et sa source réelle. Prenons l'exemple d'un libraire qui utilise un embedding vectoriel pour représenter son inventaire de livres à des fins de recherche et de recommandation. Lorsqu'un livre est épuisé ou retiré des stocks, la suppression du point de données correspondant de l'index garantit que les résultats de recherche et les recommandations restent précis et à jour.

Curl


curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/indexes/{INDEX_ID}:removeDatapoints -d '{datapoint_ids: ["'{DATAPOINT_ID_1}'", "'{DATAPOINT_ID_2}'"]}'

Console

Console

Suivez ces instructions pour supprimer un point de données de l'index en continu.

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la section Déployer et utiliser. Sélectionnez Vector Search.

    Accéder à "Recherche vectorielle"

  2. Sélectionnez l'index en continu que vous souhaitez mettre à jour. La page Informations sur l'index s'affiche.
  3. Sélectionnez Modifier l'index. Un volet de modification d'index s'ouvre.
  4. Dans le volet, sélectionnez l'onglet Supprimer des points de données.
  5. Ajoutez jusqu'à 20 points de données en spécifiant une liste d'ID de points de données séparés par une virgule.
  6. Cliquez sur Supprimer.
  7. Cliquez sur Terminé pour fermer le panneau.

Python

Python

def vector_search_remove_datapoints(
    project: str,
    location: str,
    index_name: str,
    datapoint_ids: Sequence[str],
) -> None:
    """Remove datapoints from a vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        datapoint_ids (Sequence[str]): Required. The datapoint IDs to remove.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    index.remove_datapoints(datapoint_ids=datapoint_ids)

Mettre à jour les métadonnées des index

IndexService.UpdateIndex peut également être utilisé pour mettre à jour les champs de métadonnées display_name, description et labels pour les index par lot et en continu. Notez qu'un seul appel à UpdateIndex peut mettre à jour les embeddings d'index ou ces champs de métadonnées, mais pas les deux en même temps.

gcloud

  1. Mettez à jour le fichier de métadonnées de votre index.
  2. Exécutez la commande gcloud ai indexes update.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • LOCAL_PATH_TO_METADATA_FILE : chemin d'accès local au fichier de métadonnées.
  • INDEX_ID : ID de l'index.
  • LOCATION : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : ID de votre projet Google Cloud .

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud ai indexes update INDEX_ID \
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes update INDEX_ID `
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes update INDEX_ID ^
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • INPUT_DIR : chemin d'accès au répertoire Cloud Storage du contenu de l'index.
  • INDEX_ID : ID de l'index.
  • LOCATION : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : ID de votre projet Google Cloud .
  • PROJECT_NUMBER : numéro de projet généré automatiquement pour votre projet.

Méthode HTTP et URL :

PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID

Corps JSON de la requête :

{
 "metadata": {
   "description": "Updated description",
   "display_name": "Updated display name"
 }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-12T23:56:14.480948Z",
     "updateTime": "2022-01-12T23:56:14.480948Z"
   }
 }
}

Python

def vector_search_update_index_metadata(
    project: str,
    location: str,
    index_name: str,
    display_name: Optional[str] = None,
    description: Optional[str] = None,
    labels: Optional[Dict[str, str]] = None,
) -> None:
    """Update a vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        display_name (str): Optional. The display name of the Index. The name
          can be up to 128 characters long and can be consist of any UTF-8
          characters.
        description (str): Optional. The description of the Index.
        labels (Dict[str, str]): Optional. The labels with user-defined
          metadata to organize your Indexs. Label keys and values can be no
          longer than 64 characters (Unicode codepoints), can only contain
          lowercase letters, numeric characters, underscores and dashes.
          International characters are allowed. See https://goo.gl/xmQnxf for
          more information on and examples of labels. No more than 64 user
          labels can be associated with one Index (System labels are excluded).
          System reserved label keys are prefixed with
          "aiplatform.googleapis.com/" and are immutable.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    index.update_metadata(
        display_name=display_name,
        description=description,
        labels=labels,
    )

Console

Suivez ces instructions pour mettre à jour les métadonnées de l'index (la console peut uniquement mettre à jour display_name et description).

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la section Déployer et utiliser. Sélectionnez Vector Search.

    Accéder à "Recherche vectorielle"

  2. Sélectionnez l'index que vous souhaitez mettre à jour. La page Informations sur l'index s'affiche.
  3. Sélectionnez Modifier l'index. Un volet de modification d'index s'ouvre.
  4. Mettez à jour les champs de métadonnées souhaités.
  5. Cliquez sur Mettre à jour.
  6. Cliquez sur Terminé pour fermer le panneau.

Compactage

Votre index est régulièrement recompilé pour prendre en compte toutes les mises à jour depuis votre dernière recompilation. Cette recompilation, ou "compactage", améliore les performances et la fiabilité des requêtes. Les compactages se produisent à la fois pour les mises à jour en continu et pour les mises à jour groupées.

  • Mise à jour en continu : Vector Search utilise des métriques basées sur l'heuristique pour déterminer à quel moment déclencher le compactage. Si les données non compactées les plus anciennes datent de cinq jours, le compactage est toujours déclenché. Vous êtes facturé pour le coût de la recompilation de l'index au même tarif que la mise à jour groupée, en plus des coûts de mise à jour en continu.

  • Mise à jour groupée : se produit lorsque la taille de l'ensemble de données incrémentiel est supérieure à 20 % de la taille de l'ensemble de données de base.

Recompiler et interroger votre index

Vous pouvez envoyer des requêtes de correspondance ou de correspondance par lot à l'aide de la CLI grpc, de la bibliothèque cliente ou du SDK Vertex AI pour Python. Lorsque vous recompilez la requête, les mises à jour devraient s'afficher en quelques secondes. Pour savoir comment interroger un index, consultez la section Interroger les index pour obtenir les voisins les plus proches.

Champs facultatifs

Lorsque vous créez un index, vous pouvez utiliser certains champs facultatifs pour affiner vos requêtes.

Faire un upsert avec restrictions

Une opération upsert sur votre index avec l'ajout d'une restriction permet d'appliquer des tags à vos points de données afin qu'ils soient déjà identifiés pour le filtrage au moment de la requête. Vous pouvez ajouter des tags de restriction pour limiter les résultats présentés dans vos données avant l'envoi d'une requête. Par exemple, un client souhaite exécuter une requête sur un index, mais veut s'assurer que les résultats n'affichent que des articles correspondant à "rouge" dans une recherche de chaussures. Dans l'exemple suivant, l'index fait l'objet d'un upsert et filtre toutes les paires de chaussure rouges tout en refusant les bleues. Cela garantit, avant l'exécution, des filtres de recherche dans les meilleures options spécifiques parmi un index volumineux et varié.

En plus des restrictions de jeton, l'exemple utilise des restrictions numériques. Dans ce cas, le point de données est associé à un prix de 20, à une longueur de 0,3 et à une largeur de 0,5. Au moment de la requête, vous pouvez utiliser ces restrictions numériques pour filtrer les résultats afin de limiter les résultats de requête en fonction des valeurs de prix, de longueur et de largeur. Par exemple, ce point de données apparaîtra dans une requête filtrant les critères de prix > 25, de longueur < 1 et de largeur < 1.

Pour en savoir plus sur le filtrage, consultez la page Vector Search pour l'indexation.

Python

# Upsert datapoints
_TEST_DATAPOINT_1 = aiplatform_v1.types.index.IndexDatapoint(
    datapoint_id="3",
    feature_vector=[0.00526886899, -0.0198396724],
    restricts=[
        aiplatform_v1.types.index.IndexDatapoint.Restriction(namespace="Color", allow_list=["red"])
    ],
    numeric_restricts=[
        aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
            namespace="cost",
            value_int=1,
        )
    ],
)
_TEST_DATAPOINT_2 =  aiplatform_v1.types.index.IndexDatapoint(
    datapoint_id="4",
    feature_vector=[0.00526886899, -0.0198396724],
    numeric_restricts=[
        aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
            namespace="cost",
            value_double=0.1,
        )
    ],
    crowding_tag=aiplatform_v1.types.index.IndexDatapoint.CrowdingTag(crowding_attribute="crowding"),
)
_TEST_DATAPOINT_3 = aiplatform_v1.types.index.IndexDatapoint(
    datapoint_id="5",
    feature_vector=[0.00526886899, -0.0198396724],
    numeric_restricts=[
        aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
            namespace="cost",
            value_float=1.1,
        )
    ],
)

_TEST_DATAPOINTS = [_TEST_DATAPOINT_1, _TEST_DATAPOINT_2, _TEST_DATAPOINT_3]

my_streaming_index = my_streaming_index.upsert_datapoints(datapoints=_TEST_DATAPOINTS)

# Dynamic metadata update
_TEST_DATAPOINT_4 = aiplatform_v1.types.index.IndexDatapoint(
    datapoint_id="-2",
    numeric_restricts=[
        aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
            namespace="cost",
            value_float=1.1,
        )
    ],
)
my_streaming_index = my_streaming_index.upsert_datapoints(datapoints=[_TEST_DATAPOINT4], update_mask=["all_restricts"])

curl

curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints: [
  {
    datapoint_id: "'${DATAPOINT_ID_1}'",
    feature_vector: [...],
    restricts: { namespace: "color", allow_list: ["red"], deny_list: ["blue"]},
    numeric_restricts: [{namespace: "price", value_int: 20}, {namespace: "length", value_float: 0.3}, {namespace: "width", value_double: 0.5}]
  }
]}'

Faire un upsert avec regroupement

Le tag de regroupement limite les résultats similaires en améliorant la diversité des résultats. Le regroupement est une contrainte sur une liste de voisins, produite par une recherche des voisins les plus proches qui nécessite qu'un certain nombre de valeurs, au maximum, parmi un groupe de résultats, renvoient la même valeur de crowding_attribute. Par exemple, supposons que vous reveniez sur votre site d'achat en ligne pour acheter des chaussures. Vous souhaitez voir une grande variété de couleurs dans les résultats, mais peut-être dans un style unique, comme des chaussures de football. Vous pouvez demander qu'un maximum de trois paires de chaussures de la même couleur soient renvoyées en définissant per_crowding_attribute_num_neighbors = 3 dans votre requête, en supposant que vous définissiez crowding_attribute sur la couleur des chaussures lors de l'insertion du point de données.

Ce champ représente le nombre maximal de correspondances autorisées avec le même tag de regroupement.

curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints: [
  {
    datapoint_id: "'${DATAPOINT_ID_1}'",
    feature_vector: [...],
    restricts: { namespace: "type", allow_list: ["cleats"]}
    crowding_tag: { crowding_attribute: "red-shoe"},
  }
]}'

Étapes suivantes