Atualizar e recriar um índice ativo

Com consultas de pesquisa grandes, a atualização dos índices é importante para ter sempre as informações mais precisas. É possível atualizar os índices da Pesquisa de vetor de algumas maneiras:

Substituir um índice inteiro

Para substituir o conteúdo de uma atualização em lote ou Index de streaming atual, use o método IndexService.UpdateIndex.

  • Defina Index.metadata.contentsDeltaUri como o URI do Cloud Storage que inclui os vetores que você quer atualizar.
  • Index.metadata.isCompleteOverwrite: definido como verdadeiro Quando definido como verdadeiro, o índice inteiro é substituído completamente pelo novo arquivo de metadados fornecido.

gcloud

  1. Atualize o arquivo de metadados de índices para definir contentsDeltaUri e isCompleteOverwrite=true.
  2. Use o comandocomando gcloud ai indexes update.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • LOCAL_PATH_TO_METADATA_FILE: o caminho local para o arquivo de metadados.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o ID do projeto do Google Cloud.

Execute o seguinte comando:

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

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • INPUT_DIR: o caminho do diretório do Cloud Storage do conteúdo do índice.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o ID do projeto do Google Cloud.
  • PROJECT_NUMBER: o número do projeto gerado automaticamente.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
 "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 como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.

Ao invocar o método abaixo, defina is_complete_overwrite=True para substituir totalmente o conteúdo do í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

Use estas instruções para atualizar um conteúdo de índice em lote.

  1. Na seção Vertex AI do console do Google Cloud, acesse a seção Implantar e usar. Selecione Pesquisa de vetor

    Acessar a Vector Search

  2. Selecione o índice que você quer atualizar. A página Informações do índice é aberta.
  3. Selecione Editar índice. Um painel de edição do índice será aberto.
  4. No campo do Cloud Storage, pesquise e selecione a pasta do Cloud Storage em que os dados vetoriais estão armazenados.
  5. Marque a caixa de substituição completa para substituir todos os dados.
  6. Clique em Atualizar.
  7. Clique em Concluído para fechar o painel.

Atualizar parcialmente um índice de lote

Para atualizar as embeddings de um Index de lote atual, use o método IndexService.UpdateIndex.

  • Defina Index.metadata.contentsDeltaUri como o URI do Cloud Storage que inclui os vetores que você quer atualizar.
  • Defina Index.metadata.isCompleteOverwrite como falso.

Somente os vetores especificados em Index.metadata.contentsDeltaUri são atualizados, inseridos ou excluídos. As outras representações no índice permanecem.

gcloud

  1. Atualize o arquivo de metadados de índices para definir contentsDeltaUri.
  2. Use o comandocomando gcloud ai indexes update.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • LOCAL_PATH_TO_METADATA_FILE: o caminho local para o arquivo de metadados.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o ID do projeto do Google Cloud.

Execute o seguinte comando:

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

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • INPUT_DIR: o caminho do diretório do Cloud Storage do conteúdo do índice.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o ID do projeto do Google Cloud.
  • PROJECT_NUMBER: o número do projeto gerado automaticamente.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
 "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 como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.

Ao invocar o método abaixo, defina 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

Use estas instruções para atualizar um conteúdo de índice em lote.

  1. Na seção Vertex AI do console do Google Cloud, acesse a seção Implantar e usar. Selecione Pesquisa de vetor

    Acessar a Vector Search

  2. Selecione o índice que você quer atualizar. A página Informações do índice é aberta.
  3. Selecione Editar índice. Um painel de edição do índice será aberto.
  4. No campo do Cloud Storage, pesquise e selecione a pasta do Cloud Storage em que os dados vetoriais estão armazenados.
  5. Verifique se a caixa "Substituir tudo" está vazia.
  6. Clique em Atualizar.
  7. Clique em Concluído para fechar o painel.

Se o Index tiver implantações associadas (consulte o campo Index.deployed_indexes), quando certas alterações no Index original estiverem sendo feitas, o DeployedIndex é atualizado de forma assíncrona em segundo plano para refletir essas alterações.

Para verificar se a alteração foi propagada, compare o horário de término da operação de índice de atualização e o DeployedIndex.index_sync_time.

Atualizar parcialmente um índice de streaming

Com as atualizações de streaming, é possível atualizar e consultar seu índice em alguns segundos. No momento, não é possível usar atualizações por streaming em um índice de atualização de lote. É preciso criar um novo índice. Consulte Criar um índice para atualização de streaming para saber mais.

É cobrado US$ 0,45 por GB usado nas atualizações de streaming. Para saber mais sobre os preços, consulte a página de preços da Vertex AI. As atualizações de streaming são aplicadas diretamente aos índices implantados na memória para que sejam refletidas nos resultados da consulta após um pequeno atraso.

Pontos de dados do comando upsert

Use estes exemplos para saber como inserir e atualizar um ponto de dados. Lembre-se de que upsert-datapoints aceita JSON somente no 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

O limite da cota de capacidade de processamento está relacionado à quantidade de dados incluídos em um comando upsert. Se o ID do ponto de dados existir no índice, o embedding será atualizado. Caso contrário, um novo embedding será adicionado.

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

Com a pesquisa híbrida, que é a prévia pública, há suporte para representações de embedding esparsas e densas de um ponto de dados. Em uma operação de inserção, a omissão de uma incorporação densa exclui a representação densa, e a omissão de uma incorporação esparsa exclui a representação esparsa.

Este exemplo atualiza embeddings densas e esparsas.

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

Este exemplo atualiza embeddings densos e remove embeddings esparsos.

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

Este exemplo atualiza embeddings esparsos e remove embeddings densos.

    
      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

Use estas instruções para atualizar o conteúdo para um índice de streaming.

  1. No console do Google Cloud, acesse a página Pesquisa de vetor.

    Acessar a Vector Search

  2. Selecione o índice que você quer atualizar. A página Informações do índice é aberta.
  3. Clique em Editar índice. Um painel de edição do índice será aberto.
  4. No painel, selecione a guia Atualizar ponto de dados para adicionar conteúdo.
  5. Insira o ID do ponto de dados.
  6. Insira pelo menos um tipo de incorporação:
    • Embedding densa: insira uma matriz de valores de ponto flutuante separados por vírgulas. O número de valores precisa corresponder às dimensões do índice.
    • Embeddings esparsos (pré-lançamento público):
      1. Insira as dimensões de embedding esparsas como uma matriz de números inteiros separados por vírgulas. O número de valores não precisa corresponder às dimensões do índice.
      2. Insira valores como uma matriz de valores de ponto flutuante separados por vírgulas. O número de valores precisa corresponder ao número de dimensões de embedding esparsas.
  7. Opcional: para ativar a filtragem por restrições de token nesse ponto de dados, clique em Adicionar restrição de token e insira um namespace e strings separadas por vírgulas como tokens.
  8. Opcional: para ativar a filtragem por restrições numéricas nesse ponto de dados, clique em Adicionar restrição numérica, insira um namespace, selecione um tipo de número e insira um valor.
  9. Opcional: para evitar muitos resultados semelhantes, insira uma string de tag de crowding.
  10. Clique em Upsert.
  11. Clique em Concluído para fechar o painel.

O limite da cota de capacidade de processamento está relacionado à quantidade de dados incluídos em um comando upsert. Se o ID do ponto de dados existir no índice, o embedding será atualizado. Caso contrário, um novo embedding será adicionado.

Atualizar metadados de incorporação

Há muitos motivos para você atualizar restrições de streaming ou restrições numéricas. Por exemplo, ao lidar com dados de alto volume e movimentação rápida, pode ser necessário priorizar determinados fluxos de dados. Atualizar diretamente restrições ou restrições numéricas permite refinar o foco em tempo real, garantindo que os dados mais importantes sejam processados ou destacados imediatamente.

É possível atualizar diretamente restrições de pontos de dados e restrições numéricas dentro de um índice de streaming sem o custo de compactação da atualização completa.

Para executar essas atualizações somente de metadados, adicione o campo update_mask à solicitação. O valor de update_mask precisa ser definido como all_restricts. Os valores de restrição e de restrição numérica definidos nos pontos de dados precisam ser os novos valores que você quer aplicar à atualização.

O exemplo a seguir mostra como adicionar restrições a dois pontos de dados já 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"}'

Remover pontos de dados

Talvez seja necessário remover os pontos de dados do índice de streaming. É possível fazer isso usando curl ou no console do Google Cloud.

Um caso de uso importante para excluir um ponto de dados de um índice é manter a paridade entre o índice e a origem real dele. Imagine um livraria que usa um embedding de vetor para representar o inventário de livros para fins de pesquisa e recomendação. Quando um livro é esgotado ou removido do estoque, a exclusão do ponto de dados correspondente do índice garante que os resultados da pesquisa e as recomendações permaneçam precisos e atualizados.

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

Use estas instruções para excluir um ponto de dados do índice de streaming.

  1. Na seção Vertex AI do console do Google Cloud, acesse a seção Implantar e usar. Selecione Pesquisa de vetor

    Acessar a Vector Search

  2. Selecione o índice de streaming que você quer atualizar. A página Informações do índice é aberta.
  3. Selecione Editar índice. Um painel de edição do índice será aberto.
  4. No painel, selecione a guia Remover pontos de dados.
  5. Adicione até 20 pontos de dados fornecendo uma lista de IDs de pontos de dados delimitada por vírgulas
  6. Clique em Remover.
  7. Clique em Concluído para fechar o painel.

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)

Atualizar metadados do índice

IndexService.UpdateIndex também pode ser usado para atualizar os campos de metadados display_name, description e labels para índices em lote e de streaming. Uma única chamada para UpdateIndex pode atualizar as embeddings do índice ou esses campos de metadados, mas não ambos ao mesmo tempo.

gcloud

  1. Atualize o arquivo de metadados de índices.
  2. Use o comandocomando gcloud ai indexes update.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • LOCAL_PATH_TO_METADATA_FILE: o caminho local para o arquivo de metadados.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o ID do projeto do Google Cloud.

Execute o seguinte comando:

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

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • INPUT_DIR: o caminho do diretório do Cloud Storage do conteúdo do índice.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o ID do projeto do Google Cloud.
  • PROJECT_NUMBER: o número do projeto gerado automaticamente.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

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

Use estas instruções para atualizar os metadados do índice. O console é limitado a atualizar display_name e description.

  1. Na seção Vertex AI do console do Google Cloud, acesse a seção Implantar e usar. Selecione Pesquisa de vetor

    Acessar a Vector Search

  2. Selecione o índice que você quer atualizar. A página Informações do índice é aberta.
  3. Selecione Editar índice. Um painel de edição do índice será aberto.
  4. Atualize os campos de metadados desejados.
  5. Clique em Atualizar.
  6. Clique em Concluído para fechar o painel.

Compactação

Periodicamente, seu índice é recriado para considerar todas as novas atualizações desde a última recriação. Essa reconstrução, ou "compactação", melhora o desempenho e a confiabilidade da consulta. As compactações ocorrem para atualizações de streaming e em lote.

  • Atualização de streaming: a pesquisa de vetores usa métricas baseadas em heurística para determinar quando acionar a compactação. Se os dados não compactados mais antigos tiverem cinco dias, a compactação será sempre acionada. Você será cobrado pelo custo de recriar o índice pela mesma taxa de uma atualização em lote, além dos custos da atualização de streaming.

  • Atualização em lote: ocorre quando o tamanho do conjunto de dados incremental é maior que 20% do tamanho do conjunto de dados base.

Recriar e consultar o índice

Como de costume, envie solicitações de correspondência ou de correspondência em lote com o gRPC cli, a biblioteca de cliente ou o SDK da Vertex AI para Python. Ao recriar a consulta, você pode esperar ver suas atualizações em alguns segundos. Para saber como consultar um índice, veja Consultar índices para ver os vizinhos mais próximos.

Campos opcionais

Ao criar um índice, há alguns campos opcionais que podem ser usados para ajustar suas consultas.

Upsert com restrições

Adicionar o índice e uma restrição é uma maneira de marcar os pontos de dados para que eles já sejam identificados para filtragem no momento da consulta. Você pode adicionar tags de restrição para limitar os resultados apresentados nos seus dados antes que uma consulta seja enviada. Por exemplo, um cliente quer executar uma consulta em um índice, mas quer garantir que os resultados mostrem apenas itens que correspondam a "vermelho" em uma pesquisa por calçados. No exemplo abaixo, o índice está sendo mantido e está filtrando todos os sapatos vermelhos, mas excluindo os azuis. Isso garante que os filtros sejam encontrados nas melhores opções específicas de um índice grande e variado antes da execução.

Além das restrições de token, o exemplo usa restrições numéricas. Nesse caso, o ponto de dados está associado a um preço de 20, um comprimento de 0,3 e uma largura de 0,5. No momento da consulta, use essas restrições numéricas para filtrar os resultados e limitar os resultados da consulta nos valores de preço, comprimento e largura. Por exemplo, esse ponto de dados apareceria em uma consulta que filtra preço > 25, comprimento < 1 e largura < 1.

Para saber mais sobre filtros, consulte Pesquisa de vetor para indexação.

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 com o recolhimento

A tag de recolhimento limita os resultados semelhantes, melhorando a diversidade de resultados. O recolhimento é uma restrição em uma lista vizinha produzida por uma pesquisa vizinha mais próxima. Ele exige que, no máximo, um valor de um grupo de resultados retorne o mesmo valor de crowding_attribute. Por exemplo, digamos que você voltou a comprar sapatos on-line. Você quer ver uma ampla variedade de cores nos resultados, mas talvez queira somente um estilo, como chuteiras. Para solicitar que mais de três pares de sapatos com a mesma cor sejam retornados, defina per_crowding_attribute_num_neighbors = 3 na consulta, supondo que você defina Crowding_attribute com a cor dos sapatos ao inserir o ponto de dados.

Esse campo representa o número máximo permitido de correspondências com a mesma tag de recolhimento.

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

A seguir