Aktiven Index aktualisieren und neu erstellen

Bei großen Suchanfragen ist es wichtig, die Indexe zu aktualisieren, damit immer die genauesten Informationen zur Verfügung stehen. Es gibt mehrere Möglichkeiten, Ihre Vektorsuchindexe zu aktualisieren:

Ganzen Index ersetzen

Mit der Methode IndexService.UpdateIndex können Sie den Inhalt eines vorhandenen Batch-Updates oder Streaming-Index ersetzen.

  • Setzen Sie Index.metadata.contentsDeltaUri auf den Cloud Storage-URI, der die zu aktualisierenden Vektoren enthält.
  • Index.metadata.isCompleteOverwrite auf „true“ festlegen. Wenn dies auf „true“ festgelegt ist, wird der gesamte Index vollständig mit der neuen Metadatendatei überschrieben, die Sie bereitstellen.

gcloud

  1. Aktualisieren Sie die Indexmetadatendatei , um contentsDeltaUri und isCompleteOverwrite=true festzulegen.
  2. Führen Sie den Befehl gcloud ai indexes update aus:

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • LOCAL_PATH_TO_METADATA_FILE: Der lokale Pfad zur Metadatendatei.
  • INDEX_ID: Die ID des Index.
  • LOCATION: Die Region, in der Sie Vertex AI verwenden.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.

Führen Sie folgenden Befehl aus:

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • INPUT_DIR: Der Cloud Storage-Verzeichnispfad des Indexinhalts.
  • INDEX_ID: Die ID des Index.
  • LOCATION: Die Region, in der Sie Vertex AI verwenden.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • PROJECT_NUMBER: Die automatisch generierte Projektnummer Ihres Projekts.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

Wenn Sie die folgende Methode aufrufen, legen Sie is_complete_overwrite=True fest, um den Inhalt des Index vollständig zu ersetzen.

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

Folgen Sie dieser Anleitung, um einen Batchindexinhalt zu aktualisieren.

  1. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Vektorsuche

    Zur Vektorsuche

  2. Wählen Sie den Index aus, den Sie aktualisieren möchten. Die Seite Indexinformationen wird geöffnet.
  3. Wählen Sie Index bearbeiten aus. Ein Bearbeitungsbereich für den Index wird geöffnet.
  4. Suchen Sie im Cloud Storage-Feld den Cloud Storage-Ordner, in dem Ihre Vektordaten gespeichert sind, und wählen Sie ihn aus.
  5. Klicken Sie das Kästchen zum vollständigen Überschreiben an, um alle vorhandenen Daten zu überschreiben.
  6. Klicken Sie auf Aktualisieren.
  7. Klicken Sie auf Fertig, um das Steuerfeld zu schließen.

Batch-Index teilweise aktualisieren

Verwenden Sie die Methode IndexService.UpdateIndex, um die Einbettungen eines vorhandenen Batches Index zu aktualisieren.

  • Setzen Sie Index.metadata.contentsDeltaUri auf den Cloud Storage-URI, der die zu aktualisierenden Vektoren enthält.
  • Legen Sie Index.metadata.isCompleteOverwrite auf „false“ fest.

Nur die in Index.metadata.contentsDeltaUri angegebenen Vektoren werden aktualisiert, eingefügt oder gelöscht. Die anderen vorhandenen Einbettungen im Index bleiben erhalten.

gcloud

  1. Aktualisieren Sie die Indexmetadatendatei , um contentsDeltaUri festzulegen.
  2. Führen Sie den Befehl gcloud ai indexes update aus:

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • LOCAL_PATH_TO_METADATA_FILE: Der lokale Pfad zur Metadatendatei.
  • INDEX_ID: Die ID des Index.
  • LOCATION: Die Region, in der Sie Vertex AI verwenden.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.

Führen Sie folgenden Befehl aus:

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • INPUT_DIR: Der Cloud Storage-Verzeichnispfad des Indexinhalts.
  • INDEX_ID: Die ID des Index.
  • LOCATION: Die Region, in der Sie Vertex AI verwenden.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • PROJECT_NUMBER: Die automatisch generierte Projektnummer Ihres Projekts.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

Legen Sie beim Aufrufen der folgenden Methode is_complete_overwrite=False fest.

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

Folgen Sie dieser Anleitung, um einen Batchindexinhalt zu aktualisieren.

  1. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Vektorsuche

    Zur Vektorsuche

  2. Wählen Sie den Index aus, den Sie aktualisieren möchten. Die Seite Indexinformationen wird geöffnet.
  3. Wählen Sie Index bearbeiten aus. Ein Bearbeitungsbereich für den Index wird geöffnet.
  4. Suchen Sie im Cloud Storage-Feld den Cloud Storage-Ordner, in dem Ihre Vektordaten gespeichert sind, und wählen Sie ihn aus.
  5. Das Kästchen für das vollständige Überschreiben darf nicht angeklickt sein.
  6. Klicken Sie auf Aktualisieren.
  7. Klicken Sie auf Fertig, um das Steuerfeld zu schließen.

Wenn im Index verknüpfte Bereitstellungen vorhanden sind (siehe Feld Index.deployed_indexes) und bestimmte Änderungen am ursprünglichen Index vorgenommen werden, wird der DeployedIndex im Hintergrund automatisch asynchron aktualisiert, um diese Änderungen widerzuspiegeln.

Vergleichen Sie die Endzeit des Vorgang zur Indexaktualisierung mit der DeployedIndex.index_sync_time, um zu prüfen, ob die Änderung übernommen wurde.

Streamingindex teilweise aktualisieren

Mithilfe von Streaming-Updates können Sie Ihren Index nun innerhalb weniger Sekunden aktualisieren und abfragen. Derzeit können Sie Streaming-Updates nicht für einen vorhandenen Index verwenden. Sie müssen dafür einen neuen Index erstellen. Weitere Informationen finden Sie unter Index für Streaming-Update erstellen.

Ihnen werden 0,45 $ pro GB in Rechnung gestellt, das für Streamingupdates verwendet wird. Weitere Informationen zu Preisen finden Sie auf der Seite Vertex AI – Preise. Streaming-Updates werden direkt auf die im Arbeitsspeicher bereitgestellten Indexe angewendet, die dann nach einer kurzen Verzögerung auf die Abfrageergebnisse angewendet werden.

Upserting von Datenpunkten

In diesen Beispielen wird gezeigt, wie Sie einen Datenpunkt aktualisieren. Beachten Sie, dass upsert-datapoints nur JSON im Arrayformat akzeptiert.

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

Das Durchsatzkontingent bezieht sich auf die Datenmenge, die in einem Upsert enthalten ist. Wenn eine Datenpunkt-ID im Index vorhanden ist, wird die Einbettung aktualisiert. Andernfalls wird eine neue Einbettung hinzugefügt.

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

Mit der Hybridsuche, die die öffentliche Vorschau ist, werden dünnbesetzte und dichte Emebising-Darstellungen für einen Datenpunkt unterstützt. Bei einem Upsert-Vorgang wird durch das Weglassen einer dichten Einbettung die dichte Darstellung gelöscht und durch das Weglassen einer dünnbesetzten Einbettung die dünnbesetzte Darstellung.

In diesem Beispiel werden sowohl dichte als auch dünnbesetzte Einbettungen aktualisiert.

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

In diesem Beispiel werden dichte Einbettungen aktualisiert und dünnbesetzte Einbettungen entfernt.

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

In diesem Beispiel werden dünnbesetzte Einbettungen aktualisiert und dichte Einbettungen entfernt.

    
      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

Folgen Sie dieser Anleitung, um Inhalte auf einem Streamingindex zu aktualisieren.

  1. Rufen Sie in der Cloud Console die Seite Vektorsuche auf.

    Zur Vektorsuche

  2. Wählen Sie den Index aus, den Sie aktualisieren möchten. Die Seite Indexinformationen wird geöffnet.
  3. Klicken Sie auf Index bearbeiten. Ein Bearbeitungsbereich für den Index wird geöffnet.
  4. Wählen Sie im Bereich den Tab Upsert-Datenpunkt aus, um Inhalte hinzuzufügen.
  5. Geben Sie die Datenpunkt-ID ein.
  6. Geben Sie mindestens einen Einbettungstyp ein:
    • Dichte Einbettung: Geben Sie ein Array von kommagetrennten Gleitkommawerten ein. Die Anzahl der Werte muss mit den Indexdimensionen übereinstimmen.
    • dünnbesetzte Einbettung (öffentliche Vorschau):
      1. Geben Sie die Dimensionen der Einbettung als Array aus kommagetrennten Ganzzahlen ein. Die Anzahl der Werte muss nicht mit den Dimensionen des Index übereinstimmen.
      2. Geben Sie die Werte als Array von kommagetrennten Gleitkommawerten ein. Die Anzahl der Werte muss mit der Anzahl der dünnbesetzten Einbettungsdimensionen übereinstimmen.
  7. Optional: Um das Filtern nach Tokenbeschränkungen für diesen Datenpunkt zu aktivieren, klicken Sie auf Tokeneinschränkung hinzufügen und geben Sie dann einen Namespace und kommagetrennte Strings als Tokens ein.
  8. Optional: Wenn Sie für diesen Datenpunkt das Filtern nach numerischen Einschränkungen aktivieren möchten, klicken Sie auf Numerische Einschränkung hinzufügen, geben Sie einen Namespace ein, wählen Sie einen Zahlentyp aus und geben Sie einen Wert ein.
  9. Optional: Geben Sie einen Crowding-Tag-String ein, um viele ähnliche Ergebnisse zu vermeiden.
  10. Klicken Sie auf Upsert.
  11. Klicken Sie auf Fertig, um das Steuerfeld zu schließen.

Das Durchsatzkontingent bezieht sich auf die Datenmenge, die in einem Upsert enthalten ist. Wenn eine Datenpunkt-ID im Index vorhanden ist, wird die Einbettung aktualisiert. Andernfalls wird eine neue Einbettung hinzugefügt.

Metadaten für das Einbetten aktualisieren

Es gibt viele Gründe, warum Sie Streamingeinschränkungen oder numerische Einschränkungen aktualisieren müssen. Wenn Sie beispielsweise mit großen Datenmengen arbeiten, die sich schnell ändern, sollten Sie bestimmte Datenstreams priorisieren. Durch die direkte Aktualisierung von Einschränkungen oder numerischen Einschränkungen können Sie den Fokus in Echtzeit verfeinern und dafür sorgen, dass die wichtigsten Daten sofort verarbeitet oder hervorgehoben werden.

Sie können Datenpunkteinschränkungen und numerische Einschränkungen innerhalb eines Streamingindex direkt aktualisieren, ohne die Kosten für die vollständige Aktualisierung zu verursachen.

Um diese reinen Metadatenaktualisierungen durchzuführen, müssen Sie das Feld update_mask in die Anfrage einfügen. Der Wert von update_mask muss auf all_restricts festgelegt werden. Die in den Datenpunkten festgelegten eingeschränkten und numerischen Einschränkungswerte sollten die neuen Werte sein, die Sie in der Aktualisierung anwenden möchten.

Das folgende Beispiel zeigt, wie Sie Einschränkungen zu zwei vorhandenen Datenpunkten hinzufügen.

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

Datenpunkte entfernen

Möglicherweise müssen Sie Datenpunkte aus Ihrem Streamingindex entfernen. Sie können dazu curl oder die Google Cloud Console verwenden.

Ein wichtiger Anwendungsfall für das Löschen eines Datenpunkts aus einem Index besteht darin, die Parität zwischen dem Index und seiner realen Quelle aufrechtzuerhalten. Nehmen wir als Beispiel einen Buchhändler, der sein Buchinventar für Such- und Empfehlungszwecke mit einer Vektoreinbettung darstellt. Wenn ein Buch ausverkauft oder aus dem Lagerbestand entfernt wird, wird durch das Löschen des entsprechenden Datenpunkts aus dem Index sichergestellt, dass Suchergebnisse und Empfehlungen korrekt und auf dem neuesten Stand bleiben.

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

Folgen Sie dieser Anleitung, um einen Datenpunkt aus dem Streamingindex zu löschen.

  1. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Vektorsuche

    Zur Vektorsuche

  2. Wählen Sie den Streamingindex aus, den Sie aktualisieren möchten. Die Seite Indexinformationen wird geöffnet.
  3. Wählen Sie Index bearbeiten aus. Ein Bearbeitungsbereich für den Index wird geöffnet.
  4. Wählen Sie im Bereich den Tab Datenpunkte entfernen aus.
  5. Sie können bis zu 20 Datenpunkte hinzufügen. Geben Sie dazu eine durch Kommas getrennte Liste von Datenpunkt-IDs an.
  6. Klicken Sie auf Entfernen.
  7. Klicken Sie auf Fertig, um das Steuerfeld zu schließen.

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)

Indexmetadaten aktualisieren

Mit IndexService.UpdateIndex können auch die Metadatenfelder display_name, description und labels für Batch- und Streaming-Indexe aktualisiert werden. Hinweis: Mit einem einzelnen Aufruf von UpdateIndex können die Index-Embeddings oder diese Metadatenfelder aktualisiert werden, aber nicht beide gleichzeitig.

gcloud

  1. Indexmetadatendatei aktualisieren
  2. Führen Sie den Befehl gcloud ai indexes update aus:

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • LOCAL_PATH_TO_METADATA_FILE: Der lokale Pfad zur Metadatendatei.
  • INDEX_ID: Die ID des Index.
  • LOCATION: Die Region, in der Sie Vertex AI verwenden.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.

Führen Sie folgenden Befehl aus:

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • INPUT_DIR: Der Cloud Storage-Verzeichnispfad des Indexinhalts.
  • INDEX_ID: Die ID des Index.
  • LOCATION: Die Region, in der Sie Vertex AI verwenden.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • PROJECT_NUMBER: Die automatisch generierte Projektnummer Ihres Projekts.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Folgen Sie dieser Anleitung, um Indexmetadaten zu aktualisieren. In der Console können nur display_name und description aktualisiert werden.

  1. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Vektorsuche

    Zur Vektorsuche

  2. Wählen Sie den Index aus, den Sie aktualisieren möchten. Die Seite Indexinformationen wird geöffnet.
  3. Wählen Sie Index bearbeiten aus. Ein Bearbeitungsbereich für den Index wird geöffnet.
  4. Aktualisieren Sie die gewünschten Metadatenfelder.
  5. Klicken Sie auf Aktualisieren.
  6. Klicken Sie auf Fertig, um das Steuerfeld zu schließen.

Verdichtung

Der Index wird regelmäßig neu erstellt, um alle neuen Updates seit der letzten Neuerstellung zu berücksichtigen. Diese Neuerstellung oder „Verdichtung” verbessert die Abfrageleistung und -zuverlässigkeit. Verdichtungen werden sowohl für Streaming- als auch für Batch-Updates vorgenommen.

  • Streaming-Update: Die Vektorsuche verwendet heuristikbasierte Messwerte, um zu bestimmen, wann die Verdichtung ausgelöst werden soll. Wenn die ältesten nicht komprimierten Daten fünf Tage alt sind, wird immer die Verdichtung ausgelöst. Ihnen werden die Kosten für die Neuerstellung des Index zum selben Preis wie ein Batchupdate in Rechnung gestellt.

  • Batch-Aktualisierung: Tritt auf, wenn die inkrementelle Dataset-Größe > 20 % der Basis-Dataset-Größe beträgt.

Index neu erstellen und abfragen

Sie können Übereinstimmungs- oder Batchanfragen für die Übereinstimmung wie gewohnt mit der gRPC-Befehlszeile, der Clientbibliothek oder dem Vertex AI SDK für Python senden. Wenn Sie die Abfrage neu erstellen, werden die Aktualisierungen innerhalb weniger Sekunden angezeigt. Informationen zum Abfragen eines Index finden Sie unter Indexabfrage zur Ermittlung nächster Nachbarn.

Optionale Felder

Wenn Sie einen Index erstellen, können Sie einige optionale Felder verwenden, um Ihre Abfragen zu optimieren.

Upserting mit Einschränkungen

Durch ein Upserting des Index und das Hinzufügen einer Einschränkung können Sie Ihre Datenpunkte mit Tags versehen, damit sie bereits zum Zeitpunkt der Abfrage gefiltert werden. Sie können eingeschränkte Tags hinzufügen, um die Ergebnisse für Ihre Daten zu begrenzen, bevor eine Abfrage gesendet wird. Beispiel: Ein Kunde möchte eine Abfrage für einen Index ausführen, möchte jedoch, dass in den Ergebnissen nur Elemente angezeigt werden, die bei der Suche nach Schuhen mit „Rot“ übereinstimmen. Im folgenden Beispiel erfolgt ein Upserting des Index und es wird in allen roten Schuhen gefiltert, wobei blaue Schuhe ausgeschlossen werden. Dadurch wird bei der Suche in den besten Optionen aus einem großen und vielfältigen Index vor der Ausführung gefiltert.

Zusätzlich zu Tokeneinschränkungen werden in diesem Beispiel numerische Einschränkungen verwendet. In diesem Fall wird dem Datenpunkt mit einem Preis von 20, einer Länge von 0,3 und einer Breite von 0,5 zugeordnet. Zum Zeitpunkt der Abfrage können Sie diese numerischen Einschränkungen verwenden, um die Ergebnisse zu filtern, um die Abfrageergebnisse anhand der Werte für Preis, Länge und Breite zu begrenzen. Dieser Datenpunkt würde beispielsweise in einer Abfrage angezeigt werden, die nach Preis > 25, Länge < 1 und Breite < 1 filtert.

Weitere Informationen zum Filtern finden Sie unter Vektorsuche für die Indexierung.

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

Upserting mit Crowding

Durch das Crowding-Tag werden ähnliche Ergebnisse begrenzt, indem die Vielfalt der Ergebnisse verbessert wird. Unter Crowding versteht man eine Einschränkung für eine Nachbarliste, die durch eine Suche nach einem Nachbarn erstellt wird, bei der nicht mehr als ein Wert einer Gruppe von Ergebnissen den gleichen Wert crowding_attribute zurückgeben muss. Angenommen, Sie möchten wieder online Schuhe kaufen. Sie möchten eine Vielzahl von Farben in den Ergebnissen sehen, möchten aber vielleicht, dass sie alle den gleichen Stil haben, z. B. Fußballschuhe. Sie können angeben, dass nicht mehr als drei Paar Schuhe mit derselben Farbe zurückgegeben werden sollen. Dazu geben Sie in Ihrer Abfrage per_crowding_attribute_num_neighbors = 3 an, vorausgesetzt, Sie geben beim Einfügen des Datenpunkts für die Farbe der Schuhe crowding_attribute an.

Dieses Feld stellt die maximal zulässige Anzahl von Übereinstimmungen mit demselben Crowding-Tag dar.

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

Nächste Schritte