Actualiza y vuelve a compilar un índice activo

Con búsqueda grandes, es importante que actualices los índices para tener siempre la información más precisa. Puedes actualizar los índices de Búsqueda de vectores de diferentes maneras:

Reemplaza un índice completo

Para reemplazar el contenido de una actualización por lotes existente o una transmisión de Index, usa el método IndexService.UpdateIndex.

  • Configura Index.metadata.contentsDeltaUri como el URI de Cloud Storage que incluye los vectores que deseas actualizar.
  • Establecer Index.metadata.isCompleteOverwrite como verdadero. Cuando se establece como verdadero, todo el índice se reemplaza por completo con el nuevo archivo de metadatos que proporciones.

gcloud

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

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

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

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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • INPUT_DIR: Es la ruta de acceso del directorio de Cloud Storage del contenido del índice.
  • INDEX_ID: Es el ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • PROJECT_NUMBER: el número de proyecto de tu proyecto generado de forma automática.

HTTP method and 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.

Cuando invoques el siguiente método, establece is_complete_overwrite=True para reemplazar 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
    )

Console

Usa estas instrucciones para actualizar el contenido de un índice por lotes.

  1. En la sección de Vertex AI de la consola de Google Cloud, ve a la sección Implementación y uso. Elige Vector Search

    Ir a Búsqueda de vectores

  2. Selecciona el índice que deseas actualizar. Se abrirá la página Index info.
  3. Selecciona Edit Index. Se abrirá un panel de edición de índice.
  4. En el campo Cloud Storage, busca y elige la carpeta de Cloud Storage en la que se almacenan tus datos vectoriales.
  5. Marca la casilla de reemplazo completo para reemplazar todos los datos existentes.
  6. Haz clic en Actualizar
  7. Haz clic en Listo para cerrar el panel.

Actualiza parcialmente un índice por lotes

Para actualizar las incorporaciones de un Index por lotes existente, usa el método IndexService.UpdateIndex.

  • Configura Index.metadata.contentsDeltaUri como el URI de Cloud Storage que incluye los vectores que deseas actualizar.
  • Establece Index.metadata.isCompleteOverwrite como falso.

Solo se actualizan, insertan o borran los vectores especificados en Index.metadata.contentsDeltaUri. Las demás incorporaciones existentes en el índice permanecen.

gcloud

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

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

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

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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • INPUT_DIR: Es la ruta de acceso del directorio de Cloud Storage del contenido del índice.
  • INDEX_ID: Es el ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • PROJECT_NUMBER: el número de proyecto de tu proyecto generado de forma automática.

HTTP method and 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.

Cuando invoques el siguiente método, establece 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

Usa estas instrucciones para actualizar el contenido de un índice por lotes.

  1. En la sección de Vertex AI de la consola de Google Cloud, ve a la sección Implementación y uso. Elige Vector Search

    Ir a Búsqueda de vectores

  2. Selecciona el índice que deseas actualizar. Se abrirá la página Index info.
  3. Selecciona Edit Index. Se abrirá un panel de edición de índice.
  4. En el campo Cloud Storage, busca y elige la carpeta de Cloud Storage en la que se almacenan tus datos vectoriales.
  5. Asegúrate de que la casilla de reemplazo completo esté despejada.
  6. Haz clic en Actualizar
  7. Haz clic en Listo para cerrar el panel.

Si el Index tiene implementaciones asociadas (consulta el campo Index.deployed_indexes), cuando se realicen ciertos cambios en el Index original, DeployedIndex se actualizará automáticamente de forma asíncrona en segundo plano para reflejar estos cambios.

Para verificar si se propagó el cambio, compara la hora de finalización de la operación de actualización del índice y el valor DeployedIndex.index_sync_time.

Cómo actualizar parcialmente un índice de transmisión

Con las actualizaciones de transmisión, puedes actualizar y consultar tu índice en unos segundos. En este momento, no puedes usar actualizaciones de transmisión en un índice de actualización por lotes existente, debes crear un índice nuevo. Si quieres obtener más información, consulta Crea un índice para la actualización de transmisión.

Se te cobra $0.45 por GB que se use para las actualizaciones de transmisión. Para obtener más información sobre los precios, consulta la página de precios de Vertex AI. Las actualizaciones de transmisión se aplican directamente a los índices implementados en la memoria para que se reflejen en los resultados de la consulta después de una breve demora.

Inserción y actualización de datos

Usa estas muestras para ver cómo actualizar un dato. Recuerda que upsert-datapoints solo acepta JSON en formato de array.

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 capacidad de procesamiento se relaciona con la cantidad de datos que se incluyen en una inserción o actualización. Si existe el ID de dato en el índice, la incorporación se actualiza, de lo contrario, se agrega una nueva.

  
  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, que está en versión preliminar pública, se admiten representaciones de incorporación dispersas y densas para un punto de datos. En una operación de inserción y actualización, omitir una incorporación densa borra la representación densa, y omitir una incorporación dispersa borra la representación dispersa.

En este ejemplo, se actualizan las incorporaciones densas y 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 incorporaciones densas y se quitan las incorporaciones 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 incorporaciones dispersas y se quitan las incorporaciones 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]}}]}'
    
  

Console

Console

Usa estas instrucciones para actualizar el contenido a un índice de transmisión.

  1. En la consola de Google Cloud, ve a la página Vector Search.

    Ir a Búsqueda de vectores

  2. Selecciona el índice que deseas actualizar. Se abrirá la página Index info.
  3. Haz clic en Edit Index. Se abrirá un panel de edición de índice.
  4. En el panel, selecciona la pestaña Upsert data point para agregar contenido.
  5. Ingresa el ID del dato.
  6. Ingresa al menos un tipo de incorporación:
    • Incorporación densa: Ingresa un array de valores de punto flotante separados por comas. La cantidad de valores debe coincidir con las dimensiones del índice.
    • Incorporación dispersa (versión preliminar pública):
      1. Ingresa las dimensiones de la incorporación dispersa como un array de números enteros separados por comas. La cantidad de valores no tiene que coincidir con las dimensiones del índice.
      2. Ingresa los valores como un array de valores de punto flotante separados por comas. La cantidad de valores debe coincidir con la cantidad de dimensiones de embedding disperso.
  7. Opcional: Para habilitar el filtrado por restricciones de tokens en este dato, haz clic en Agregar restricción de tokens y, luego, ingresa un espacio de nombres y cadenas separadas por comas como tokens.
  8. Opcional: Para habilitar el filtrado por restricciones numéricas en este dato, haz clic en Agregar restricción numérica, ingresa un espacio de nombres, selecciona un tipo de número y, luego, ingresa un valor.
  9. Opcional: Para evitar muchos resultados similares, ingresa una cadena de etiqueta de agrupación.
  10. Haz clic en Upsert.
  11. Haz clic en Listo para cerrar el panel.

El límite de cuota de capacidad de procesamiento se relaciona con la cantidad de datos que se incluyen en una inserción o actualización. Si existe el ID de dato en el índice, la incorporación se actualiza, de lo contrario, se agrega una nueva.

Actualiza los metadatos de incorporación

Existen muchos motivos por los que podrías necesitar actualizar las restricciones de transmisión o numéricas. Por ejemplo, cuando se trata de datos de alto volumen y de rápida actualización, es posible que desees priorizar ciertos flujos de datos. La actualización directa de restricciones o restricciones numéricas te permite definir mejor el enfoque en tiempo real, lo que garantiza que los datos más importantes se procesen o destaquen de inmediato.

Puedes actualizar directamente las restricciones de datos y las restricciones numéricas dentro de un índice de transmisión sin el costo de compactación de la actualización completa.

Para realizar estas actualizaciones de solo metadatos, debes agregar el campo update_mask a la solicitud. El valor de update_mask debe establecerse en all_restricts. Los valores de restricción y restricción numérica establecidos en los datos deben ser los valores nuevos que deseas aplicar en la actualización.

En el siguiente ejemplo, se muestra cómo agregar restricciones a dos datos existentes.

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 datos

Es posible que debas quitar los datos de tu índice de transmisión. Puedes hacerlo a través de curl o desde la consola de Google Cloud.

Un caso de uso clave para borrar un dato de un índice es mantener la paridad entre el índice y su fuente real. Imagina un vendedor de libros que usa una incorporación de vector para representar su inventario de libros con fines de búsqueda y recomendación. Cuando un libro está agotado o se quita de las existencias, borrar los datos correspondientes del índice garantiza que los resultados de la búsqueda y las recomendaciones permanezcan precisos y 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}'"]}'

Console

Console

Usa estas instrucciones para borrar un dato del índice de transmisión.

  1. En la sección de Vertex AI de la consola de Google Cloud, ve a la sección Implementación y uso. Elige Vector Search

    Ir a Búsqueda de vectores

  2. Selecciona el índice de transmisión que deseas actualizar. Se abrirá la página Index info.
  3. Selecciona Edit Index. Se abrirá un panel de edición de índice.
  4. En el panel, selecciona la pestaña Remove data points.
  5. Para agregar hasta 20 datos, proporciona una lista delimitada por comas de los IDs de datos.
  6. Haz clic en Quitar.
  7. Haz clic en Listo 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)

Actualiza los metadatos del índice

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

gcloud

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

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

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

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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • INPUT_DIR: Es la ruta de acceso del directorio de Cloud Storage del contenido del índice.
  • INDEX_ID: Es el ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • PROJECT_NUMBER: el número de proyecto de tu proyecto generado de forma automática.

HTTP method and 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Usa estas instrucciones para actualizar los metadatos del índice (la consola se limita a actualizar display_name y description).

  1. En la sección de Vertex AI de la consola de Google Cloud, ve a la sección Implementación y uso. Elige Vector Search

    Ir a Búsqueda de vectores

  2. Selecciona el índice que deseas actualizar. Se abrirá la página Index info.
  3. Selecciona Edit Index. Se abrirá un panel de edición de índice.
  4. Actualiza los campos de metadatos que desees.
  5. Haz clic en Actualizar
  6. Haz clic en Listo para cerrar el panel.

Compactación

Periódicamente, se vuelve a compilar el índice para tener en cuenta todas las actualizaciones nuevas desde la última compilación. Esta recompilación, o “compactación”, mejora el rendimiento y la confiabilidad de las consultas. Las compactaciones se producen tanto para las actualizaciones de transmisión como para las actualizaciones por lotes.

  • Actualización continua: La Búsqueda vectorial usa métricas basadas en heurísticas para determinar cuándo activar la compactación. Si los datos sin compactar más antiguos tienen cinco días de antigüedad, la compactación siempre se activa. Se te factura por el costo de volver a compilar el índice con la misma tarifa de una actualización por lotes, además de los costos de actualización de transmisión.

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

Vuelve a compilar y consultar tu índice

Puedes enviar solicitudes de coincidencias o coincidencias por lotes, como de costumbre, con grpc cli, la biblioteca cliente o el SDK de Vertex AI para Python. Cuando vuelvas a compilar la consulta, verás las actualizaciones en unos segundos. Si deseas aprender a consultar un índice, visita Consulta índices para obtener los vecinos más cercanos.

Campos opcionales

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

Inserción y actualización con restricciones

La inserción de un índice y una restricción es una forma de etiquetar los datos para que se identifiquen para filtrarlos en el momento de la consulta. Es posible que quieras agregar etiquetas de restricción para limitar los resultados que se presentan en los 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 elementos que coincidan con “red” en una búsqueda de calzado. En el siguiente ejemplo, el índice se actualiza o inserta y filtra todo el calzado rojo, pero rechaza el azul. Esto garantiza que los filtros de búsqueda tengan las mejores opciones específicas de un índice grande y variado antes de la ejecución.

Además de las restricciones de tokens, el ejemplo usa restricciones numéricas. En este caso, el dato está asociado con un precio de 20, una longitud de 0.3 y un ancho de 0.5. En el momento de la consulta, puedes usar estas restricciones numéricas para filtrar los resultados y limitar los resultados de la consulta en los valores de precio, longitud y ancho. Por ejemplo, este dato aparecería en una consulta que filtre por precio > 25, longitud < 1 y ancho < 1.

Si quieres obtener más información sobre el filtrado, consulta Vector Search para la 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}]
  }
]}'

Inserción y actualización con acumulación

La etiqueta de multiplicidad limita los resultados similares mediante la mejora de la diversidad de resultados. La aglomeración es una restricción en una lista de vecinos que produce una búsqueda de vecino más cercano que requiere que no más de un valor, de un grupo de resultados, muestre el mismo valor de crowding_attribute. A modo de ejemplo, supongamos que volviste a estar en línea para comprar zapatos. Quieres ver una amplia variedad de colores en los resultados, pero tal vez quieras que tengan un solo estilo, como calzado de fútbol. Puedes pedir que no se muestren más de 3 pares de calzado con el mismo color si configuras per_crowding_attribute_num_neighbors = 3 en la consulta, si suponemos que crowding_attribute tiene el color del calzado cuando se insertan los datos.

Este campo representa la cantidad máxima permitida de coincidencias con la misma etiqueta de agrupamiento.

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

¿Qué sigue?