Actualizar y volver a compilar un índice activo

En el caso de las consultas de búsqueda grandes, es importante actualizar los índices para tener siempre la información más precisa. Puedes actualizar tus índices de búsqueda vectorial de varias formas:

Sustituir un índice completo

Para sustituir el contenido de una actualización por lotes o una emisión en tiempo real Index, utiliza el método IndexService.UpdateIndex.

  • Asigna a Index.metadata.contentsDeltaUri el URI de Cloud Storage que incluya los vectores que quieras actualizar.
  • Asigna el valor true a Index.metadata.isCompleteOverwrite. Si se define como "true", todo el índice se sobrescribe por completo con el nuevo archivo de metadatos que proporciones.

gcloud

  1. Actualice el archivo de metadatos de índice para definir contentsDeltaUri y isCompleteOverwrite=true.
  2. Usa el comando gcloud ai indexes update.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • LOCAL_PATH_TO_METADATA_FILE: ruta local al archivo de metadatos.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o 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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INPUT_DIR: la ruta del directorio de Cloud Storage del contenido del índice.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "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

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

Cuando invoques el método que se indica a continuación, asigna el valor is_complete_overwrite=True para sustituir por completo el contenido del índice.

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
    )

Consola

Sigue estas instrucciones para actualizar el contenido de un índice de lote.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Selecciona el índice que quieras actualizar. Se abrirá la página Información del índice.
  3. Selecciona Editar índice. Se abrirá un panel de edición de índice.
  4. En el campo Cloud Storage, busca y selecciona la carpeta de Cloud Storage en la que se almacenan tus datos vectoriales.
  5. Marca la casilla de sobrescritura completa para sobrescribir todos los datos.
  6. Haz clic en Actualizar.
  7. Haz clic en Hecho para cerrar el panel.

Actualizar parcialmente un índice por lotes

Para actualizar las inserciones de un lote Index, usa el método IndexService.UpdateIndex.

  • Asigna a Index.metadata.contentsDeltaUri el URI de Cloud Storage que incluya los vectores que quieras actualizar.
  • Asigna el valor "false" a Index.metadata.isCompleteOverwrite.

Solo se actualizan, insertan o eliminan los vectores especificados en Index.metadata.contentsDeltaUri. Las demás inserciones del índice se conservarán.

gcloud

  1. Actualiza tu archivo de metadatos de índice para definir contentsDeltaUri.
  2. Usa el comando gcloud ai indexes update.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • LOCAL_PATH_TO_METADATA_FILE: ruta local al archivo de metadatos.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o 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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INPUT_DIR: la ruta del directorio de Cloud Storage del contenido del índice.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "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

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

Cuando invoques el método que se indica a continuación, define 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
    )

Consola

Sigue estas instrucciones para actualizar el contenido de un índice de lote.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Selecciona el índice que quieras actualizar. Se abrirá la página Información del índice.
  3. Selecciona Editar índice. Se abrirá un panel de edición de índice.
  4. En el campo Cloud Storage, busca y selecciona la carpeta de Cloud Storage en la que se almacenan tus datos vectoriales.
  5. Asegúrate de que la casilla de sobrescritura completa no esté marcada.
  6. Haz clic en Actualizar.
  7. Haz clic en Hecho para cerrar el panel.

Si el Index tiene alguna implementación asociada (consulte el campo Index.deployed_indexes), cuando se realicen determinados cambios en el Index original, el DeployedIndex se actualizará automáticamente de forma asíncrona en segundo plano para reflejar estos cambios.

Para comprobar si el cambio se ha propagado, compara la hora de finalización de la operación de actualización del índice y el DeployedIndex.index_sync_time.

Actualizar parcialmente un índice de streaming

Con las actualizaciones de streaming, puedes actualizar tu índice y hacer consultas en él en cuestión de segundos. Por el momento, no puede usar actualizaciones en streaming en un índice de actualización por lotes que ya tenga, sino que debe crear un índice. Consulta Crear un índice para la actualización en streaming para obtener más información.

Se te cobran 0,45 USD por cada GB utilizado en las actualizaciones en streaming. Para obtener más información sobre los precios, consulta la página de precios de Vertex AI. Las actualizaciones de la transmisión se aplican directamente a los índices implementados en la memoria, que se reflejan en los resultados de las consultas tras un breve periodo de tiempo.

Insertar o actualizar puntos de datos

Usa estos ejemplos para ver cómo insertar o actualizar un punto de datos. Recuerda que upsert-datapoints solo acepta JSON en formato de matriz.

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

El límite de cuota de rendimiento se relaciona con la cantidad de datos que se incluyen en una inserción o actualización. Si el ID del punto de datos ya existe en el índice, se actualiza la inserción. De lo contrario, se añade una nueva inserción.

  
  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: [...]}]}'
  
  

Con la búsqueda híbrida, se admiten representaciones de inserciones dispersas y densas para un punto de datos. En una operación de upsert, si se omite una inserción densa, se elimina la representación densa, y si se omite una inserción dispersa, se elimina la representación dispersa.

En este ejemplo se actualizan tanto las inserciones densas como las dispersas.

  
    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]}}]}'
  
  

En este ejemplo se actualizan las inserciones densas y se eliminan las dispersas.

    
      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]}]}'
    
  

En este ejemplo se actualizan las inserciones dispersas y se eliminan las densas.

    
      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]}}]}'
    
  

Consola

Consola

Sigue estas instrucciones para actualizar el contenido de un índice de streaming.

  1. En la Google Cloud consola, ve a la página Búsqueda vectorial.

    Ir a Vector Search

  2. Selecciona el índice que quieras actualizar. Se abrirá la página Información del índice.
  3. Haz clic en Editar índice. Se abrirá un panel de edición de índice.
  4. En el panel, selecciona la pestaña Insertar o actualizar punto de datos para añadir contenido.
  5. Introduce el ID del punto de datos.
  6. Introduce al menos un tipo de inserción:
    • Embedding denso: introduce una matriz de valores de punto flotante separados por comas. El número de valores debe coincidir con las dimensiones del índice.
    • Inserción dispersa:
      1. Introduce las dimensiones de la inserción dispersa como una matriz de números enteros separados por comas. El número de valores no tiene por qué coincidir con las dimensiones del índice.
      2. Introduce los valores como una matriz de valores de punto flotante separados por comas. El número de valores debe coincidir con el número de dimensiones de la inserción dispersa.
  7. Opcional: Para habilitar el filtrado por restricciones de token en este punto de datos, haga clic en Añadir restricción de token y, a continuación, introduzca un espacio de nombres y cadenas separadas por comas como tokens.
  8. Opcional: Para habilitar el filtrado por restricciones numéricas en este punto de datos, haga clic en Añadir restricción numérica, introduzca un espacio de nombres, seleccione un tipo de número e introduzca un valor.
  9. Opcional: Para evitar que se muestren muchos resultados similares, introduce una cadena de etiqueta de aglomeración.
  10. Haz clic en Upsert.
  11. Haz clic en Hecho para cerrar el panel.

El límite de cuota de rendimiento se relaciona con la cantidad de datos que se incluyen en una inserción o actualización. Si el ID del punto de datos existe en el índice, se actualiza la inserción. De lo contrario, se añade una nueva inserción.

Actualizar metadatos de inserciones

Hay muchos motivos por los que puede que tengas que actualizar las restricciones de streaming o las restricciones numéricas. Por ejemplo, cuando se trata de datos de gran volumen y que cambian rápidamente, puede que quieras priorizar determinados flujos de datos. Si actualizas directamente las restricciones o las restricciones numéricas, podrás acotar el enfoque en tiempo real, lo que te permitirá procesar o destacar inmediatamente los datos más importantes.

Puedes actualizar directamente las restricciones de puntos de datos y las restricciones numéricas en un índice de streaming sin el coste de compactación de una actualización completa.

Para llevar a cabo estas actualizaciones solo de metadatos, debes añadir el campo update_mask a la solicitud. El valor de update_mask debe ser all_restricts. Los valores de restricción y restricción numérica definidos en los puntos de datos deben ser los nuevos valores que quieras aplicar en la actualización.

En el siguiente ejemplo se muestra cómo añadir restricciones a dos puntos de datos.

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"}'

Quitar puntos de datos

Es posible que tengas que quitar puntos de datos de tu índice de streaming. Puedes hacerlo con curl o desde la Google Cloud consola.

Un caso práctico clave para eliminar un punto de datos de un índice es mantener la paridad entre el índice y su fuente del mundo real. Imagina que un librero usa una inserción vectorial para representar su inventario de libros con fines de búsqueda y recomendación. Cuando un libro se agota o se retira del stock, eliminar el punto de datos correspondiente del índice asegura que los resultados de búsqueda y las recomendaciones sigan siendo precisos y estén actualizados.

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}'"]}'

Consola

Consola

Sigue estas instrucciones para eliminar un punto de datos del índice de streaming.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Selecciona el índice de streaming que quieras actualizar. Se abrirá la página Información del índice.
  3. Selecciona Editar índice. Se abrirá un panel de edición de índice.
  4. En el panel, selecciona la pestaña Quitar puntos de datos.
  5. Añade hasta 20 puntos de datos proporcionando una lista de IDs de puntos de datos delimitada por comas.
  6. Haz clic en Quitar.
  7. Haz clic en Hecho para cerrar el panel.

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)

Actualizar metadatos de índice

IndexService.UpdateIndex también se puede usar para actualizar los campos de metadatos display_name, description y labels de los índices de lotes y de streaming. Ten en cuenta que una sola llamada a UpdateIndex puede actualizar las inserciones de índice o estos campos de metadatos, pero no ambos a la vez.

gcloud

  1. Actualiza el archivo de metadatos de tu índice.
  2. Usa el comando gcloud ai indexes update.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • LOCAL_PATH_TO_METADATA_FILE: ruta local al archivo de metadatos.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o 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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INPUT_DIR: la ruta del directorio de Cloud Storage del contenido del índice.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "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,
    )

Consola

Sigue estas instrucciones para actualizar los metadatos de índice (la consola solo permite actualizar display_name y description).

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Selecciona el índice que quieras actualizar. Se abrirá la página Información del índice.
  3. Selecciona Editar índice. Se abrirá un panel de edición de índice.
  4. Actualiza los campos de metadatos que quieras.
  5. Haz clic en Actualizar.
  6. Haz clic en Hecho para cerrar el panel.

Compactación

Tu índice se vuelve a crear periódicamente para tener en cuenta todas las novedades desde la última vez que se creó. Esta recompilación, también llamada "compactación", mejora el rendimiento y la fiabilidad de las consultas. Las compactaciones se producen tanto en las actualizaciones de streaming como en las actualizaciones por lotes.

  • Actualización de la transmisión: la búsqueda de vectores usa métricas basadas en heurísticas para determinar cuándo activar la compactación. Si los datos sin comprimir más antiguos tienen cinco días, la compresión siempre se activa. Se te cobrará el coste de recompilación del índice al mismo precio que una actualización por lotes, además de los costes de la actualización en streaming.

  • Actualización por lotes: se produce cuando el tamaño del conjunto de datos incremental es superior al 20% del tamaño del conjunto de datos base.

Reconstruir y consultar el índice

Puedes enviar solicitudes de coincidencia o de coincidencia por lotes como de costumbre con la CLI de grpc, la biblioteca de cliente o el SDK de Vertex AI para Python. Cuando vuelvas a crear la consulta, verás los cambios en unos segundos. Para saber cómo consultar un índice, consulta Consultar índices para obtener los vecinos más cercanos.

Campos opcionales:

Cuando creas un índice, hay algunos campos opcionales que puedes usar para afinar tus consultas.

Upsert con restricciones

Insertar o actualizar tu índice y añadir una restricción es una forma de etiquetar tus puntos de datos para que ya estén identificados para filtrar en el momento de la consulta. Puede añadir etiquetas de restricción para limitar los resultados que se muestran en sus datos antes de enviar una consulta. Por ejemplo, un cliente quiere ejecutar una consulta en un índice, pero quiere asegurarse de que los resultados solo muestren los artículos que coincidan con "rojo" en una búsqueda de calzado. En el ejemplo siguiente, se está insertando el índice y se están filtrando todos los zapatos rojos, pero se rechazan los azules. De esta forma, se asegura de que los filtros de búsqueda seleccionen las mejores opciones específicas de un índice amplio y variado antes de ejecutarse.

Además de las restricciones de tokens, el ejemplo usa restricciones numéricas. En este caso, el punto de datos está asociado a un precio de 20, una longitud de 0,3 y una anchura de 0,5. En el momento de la consulta, puede usar estas restricciones numéricas para filtrar los resultados y limitar los resultados de la consulta en función de los valores de precio, longitud y anchura. Por ejemplo, este punto de datos aparecería en una consulta que filtra por precio > 25, longitud < 1 y anchura < 1.

Para obtener más información sobre el filtrado, consulta Búsqueda vectorial para indexación.

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}]
  }
]}'

Upsert con aglomeración

La etiqueta de agrupamiento limita los resultados similares mejorando la diversidad de los resultados. El apiñamiento es una restricción de una lista de vecinos producida por una búsqueda de vecinos más cercanos que requiere que no más de un valor de un grupo de resultados devuelva el mismo valor de crowding_attribute. Por ejemplo, supongamos que vuelves a estar online y buscas zapatos. Quieres ver una amplia variedad de colores en los resultados, pero quizás quieras que tengan un solo estilo, como las botas de fútbol. Puedes pedir que se devuelvan como máximo 3 pares de zapatos del mismo color si asignas el valor per_crowding_attribute_num_neighbors = 3 a tu consulta, siempre que hayas asignado el valor del atributo de aglomeración al color de los zapatos al insertar el punto de datos.

Este campo representa el número máximo permitido de coincidencias con la misma etiqueta de aglomeración.

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"},
  }
]}'

Siguientes pasos