Schema der Sammlung ändern

Wenn eine Sammlung von der Entwicklung in die Produktion übergeht, ändert sich ihr Schema häufig. Möglicherweise fügen Sie skalare Felder wie „ source_uri “ oder „ review_status “ für Filter- und Anwendungslogik hinzu, fügen ein neues Vektorfeld für von Ihrer Anwendung generierte Einbettungen hinzu, fügen eine BM25-Funktion und das von ihr generierte spärliche Vektorfeld für die lexikalische Suche in vorhandenem Text hinzu oder entfernen Felder und Funktionen, die nicht mehr verwendet werden. Mit „Sammlungsschema ändern“ können Sie unterstützte Feld- und Funktionsänderungen direkt vornehmen, anstatt die Sammlung neu zu erstellen.

Dieses Handbuch behandelt Schemaänderungen für benutzerdefinierte Felder und für Funktionen mit ihren generierten Vektorfeldern in verwalteten Sammlungen. Informationen zum Hinzufügen eines Feldes zu einer externen Sammlung finden Sie unter „Alter External Collection Schema“. Informationen zu Änderungen an Feldeigenschaften, wie z. B. das Ändern von „ max_length “ bei einem „ VARCHAR “-Feld oder von „ max_capacity “ bei einem „ ARRAY “-Feld, finden Sie unter „Alter Collection Field“. Informationen zum dynamischen Feldverhalten finden Sie unter „Dynamisches Feld “ und „Sammlung ändern“.

Einschränkungen

Benutzerdefinierte Felder hinzufügen

  • Hinzugefügte benutzerdefinierte Felder müssen nullfähig sein. Legen Sie beim Aufruf von ` add_collection_field()` den Parameter ` nullable=True ` fest. Bei bestehenden Entitäten ist das hinzugefügte Feld ein ` NULL `, es sei denn, Sie fügen ein Skalarfeld mit dem Parameter ` default_value` hinzu.

  • Das Hinzufügen benutzerdefinierter Skalarfelder wird ab Milvus 2.6.x unterstützt. Das Hinzufügen benutzerdefinierter Vektorfelder wird ab Milvus 2.6.18 unterstützt.

  • Das Hinzufügen von StructArray-Feldern wird ab Milvus 3.0.0 unterstützt. Hinzugefügte StructArray-Felder müssen nullfähig sein.

  • Feldnamen müssen innerhalb der Sammlung eindeutig sein.

Eine Funktion und das daraus generierte Vektorfeld hinzufügen

  • Bei jeder Schemaaktualisierung können jeweils nur eine Funktion und ein generiertes Vektorfeld hinzugefügt werden.

  • Die unterstützte Funktion bestimmt den Typ des generierten Vektorfeldes: „ BM25 “ generiert ein „ SPARSE_FLOAT_VECTOR “-Feld, und „ MINHASH “ generiert ein „ BINARY_VECTOR “-Feld.

  • Das generierte Vektorfeld muss ein neues Feld sein. Es darf nicht auf ein Feld verweisen, das bereits im Sammlungsschema vorhanden ist.

  • Das generierte Vektorfeld darf nicht nullfähig sein.

  • Die von der Funktion verwendeten Eingabefelder müssen bereits in der Sammlung vorhanden sein.

  • Beim Hinzufügen einer BM25- oder MinHash-Funktion zu einer bestehenden Sammlung muss die Funktionseingabe ein Feld vom Typ „ VARCHAR “ sein. Eine Eingabe vom Typ „ TEXT “ wird in diesem Workflow nicht unterstützt, da Milvus die generierte Ausgabe für bestehende Entitäten nicht aus diesem Eingabetyp nachträglich einfügen kann.

Benutzerdefinierte Felder löschen

  • Sie können das Primärschlüsselfeld, das Partitionsschlüsselfeld, das Clustering-Schlüsselfeld oder das letzte Vektorfeld in einer Sammlung nicht entfernen.

  • Sie können ein gesamtes „ ARRAY<STRUCT> “-Feld löschen, jedoch kein einzelnes Unterfeld innerhalb eines „ ARRAY<STRUCT> “-Feldes.

  • Sie können ein Feld, das als Eingabefeld einer Funktion verwendet oder als Ausgabefeld einer Funktion generiert wurde, nicht direkt löschen. Um ein Ausgabefeld einer Funktion zu entfernen, löschen Sie die Funktion, die es generiert.

Eine Funktion und ihr generiertes Vektorfeld löschen

  • In diesem Workflow zur Schemaänderung werden durch das Löschen einer Funktion die Funktion selbst, ihr generiertes Vektorfeld und der zugehörige Index entfernt. Die Eingabefelder der Funktion verbleiben im Schema der Sammlung.

  • Das Entfernen einer Funktion wird abgelehnt, wenn die Sammlung durch das Entfernen ihres generierten Vektorfeldes kein Vektorfeld mehr hätte.

Für Schemaänderungen, die über die unterstützten Hinzufügungs- und Löschvorgänge hinausgehen, müssen Sie die Sammlung neu erstellen oder migrieren.

Felder und Funktionen zu einer bestehenden Sammlung hinzufügen

Wählen Sie den entsprechenden Workflow aus, je nachdem, ob Sie ein benutzerdefiniertes Feld oder eine Funktion hinzufügen, die ein Vektorfeld generiert:

In allen Fällen darf der Name des neuen Feldes in der Sammlung noch nicht vorhanden sein, und die Gesamtzahl der Felder darf die von Milvus festgelegte Obergrenze für die Anzahl der Felder nicht überschreiten. Weitere Informationen finden Sie unter „Milvus-Grenzwerte“.

Benutzerdefinierte Skalarfelder hinzufügenCompatible with Milvus 2.6.x

Verwenden Sie „ add_collection_field() “, um ein benutzerdefiniertes Skalarfeld zu einer bestehenden Sammlung hinzuzufügen.

Dies unterscheidet sich vom Speichern beliebiger Schlüssel im dynamischen Feld: Sobald die Schemaaktualisierung verfügbar ist, wird das neue Skalarfeld zu einem festen Bestandteil des Kollektionsschemas. Sie können Werte darin einfügen oder aktualisieren, dort Indizes erstellen (sofern unterstützt), es in Abfragen und Suchfiltern verwenden und es in der Abfrage- oder Suchausgabe zurückgeben.

Da bestehende Entitäten bereits vor der Einführung des neuen Feldes eingefügt wurden, muss jedes hinzugefügte benutzerdefinierte Skalarfeld nullfähig sein:

  • Wenn Sie ein Skalarfeld mit ` nullable=True ` und ohne ` default_value` hinzufügen, geben bestehende Entitäten für das neue Feld ` NULL ` zurück.

  • Wenn Sie ein Skalarfeld mit „ nullable=True “ und „ default_value “ hinzufügen, geben bestehende Entitäten den Standardwert anstelle von „ NULL “ zurück.

Skalare Filterausdrücke stimmen nicht mit den skalaren Werten von „ NULL “ überein. Weitere Informationen finden Sie unter „Nullfähige Felder“.

Beispiel: Hinzufügen eines nullfähigen Skalarfelds

Im folgenden Beispiel wird ein nullfähiges Feld vom Typ „ source “ zu einer bestehenden Sammlung namens „ product_catalog “ hinzugefügt.

from pymilvus import DataType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.add_collection_field(
    collection_name="product_catalog",
    field_name="source",
    data_type=DataType.VARCHAR,
    max_length=128,
    nullable=True,
)

Nachdem das Feld hinzugefügt wurde, geben Entitäten, die bereits in der Sammlung vorhanden waren, „ NULL “ für „ source “ zurück. Neue Entitäten können bei der Einfügung oder Aktualisierung den Wert „ source “ festlegen.

Beispiel: Hinzufügen eines Skalarfelds mit einem Standardwert

Wenn vorhandene Entitäten anstelle von „ NULL “ einen konkreten Wert zurückgeben sollen, geben Sie beim Hinzufügen eines Skalarfeldes „ default_value “ an. Im folgenden Beispiel wird ein Feld „ review_status “ hinzugefügt und „ "unreviewed" “ als Standardwert verwendet.

from pymilvus import DataType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.add_collection_field(
    collection_name="product_catalog",
    field_name="review_status",
    data_type=DataType.VARCHAR,
    max_length=32,
    nullable=True,
    default_value="unreviewed",
)

Nachdem das Feld hinzugefügt wurde, geben Entitäten, die bereits in der Sammlung vorhanden waren, für „ review_status “ den Wert „ "unreviewed" “ zurück. Neue Entitäten können einen anderen Wert festlegen oder den Standardwert verwenden, wenn kein Wert angegeben wird.

StructArray-Felder hinzufügenCompatible with Milvus 3.0.0

Verwenden Sie „ add_collection_struct_field() “, um ein StructArray-Feld hinzuzufügen, das Arrays von Struct-Elementen akzeptiert. Gehen Sie wie folgt vor, um ein StructArray-Feld hinzuzufügen:

  1. Erstellen Sie ein Struct-Schema, das die erforderlichen Unterfelder der unterstützten Datentypen enthält. Informationen zu den zulässigen Datentypen finden Sie unter „StructArray-Beschränkungen“.

  2. Verweisen Sie auf das oben erstellte Struct-Schema und legen Sie die maximale Kapazität des Feldes unter „ add_collection_struct_field() “ fest.

  3. Legen Sie „ nullable=True “ in der Anfrage fest.

Beispiel: Hinzufügen eines nullfähigen StructArray-Feldes

from pymilvus import DataType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

# Create a Struct schema.
struct_schema = client.create_struct_field_schema()

# Add scalar fields to the Struct.
struct_schema.add_field("text", DataType.VARCHAR, max_length=65535)
struct_schema.add_field("chapter", DataType.VARCHAR, max_length=512)

# Add vector fields to the Struct with mmap enabled.
struct_schema.add_field("text_vector", DataType.FLOAT_VECTOR, mmap_enabled=True, dim=5)
struct_schema.add_field("chapter_vector", DataType.FLOAT_VECTOR, mmap_enabled=True, dim=5)

client.add_collection_struct_field(
    collection_name="books",
    field_name="chunks",
    struct_schema=struct_schema,
    max_capacity=1024,
    nullable=True,
)

Nachdem das StructArray-Feld hinzugefügt wurde, geben bereits in der Sammlung vorhandene Entitäten für alle ihre Unterfelder den Wert „ NULL “ für „ chunks “ zurück. Achten Sie beim Einfügen einer neuen Entität darauf, dass alle Unterfelder entweder auf „ NULL “ gesetzt sind oder gültige Werte enthalten. Das Einfügen einer Entität, bei der einige Unterfelder auf „ NULL “ und andere auf gültige Werte gesetzt sind, führt zu Fehlern.

Benutzerdefinierte Vektorfelder hinzufügenCompatible with Milvus 2.6.18+

Verwenden Sie „ add_collection_field() “, um ein benutzerdefiniertes Vektorfeld hinzuzufügen, wenn Ihre Anwendung Einbettungen generiert und Vektorwerte in Milvus schreibt.

Jedes hinzugefügte benutzerdefinierte Vektorfeld muss nullfähig sein. Vorhandene Entitäten verfügen über den Wert „ NULL “ für das neue Vektorfeld, bis Sie Vektorwerte über „Upsert“ oder einen Backfill-Workflow schreiben. Neue Entitäten können das Vektorfeld beim Einfügen bereits enthalten. Die Vektorsuche überspringt Entitäten, deren Vektorwert „ NULL “ lautet. Weitere Informationen finden Sie unter „Nullfähige Felder“.

Beispiel: Hinzufügen eines nullfähigen Vektorfeldes

Im folgenden Beispiel wird ein nullfähiges dichtes Vektorfeld mit dem Namen „ embedding_v2 “ zu einer bestehenden Sammlung hinzugefügt. Setzen Sie „ dim “ auf die Dimensionalität der von Ihrer Anwendung generierten Einbettungen.

from pymilvus import DataType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.add_collection_field(
    collection_name="product_catalog",
    field_name="embedding_v2",
    data_type=DataType.FLOAT_VECTOR,
    dim=768,
    nullable=True,
)

Nachdem das Feld hinzugefügt wurde, erstellen Sie einen Index für das neue Vektorfeld, bevor Sie darin suchen:

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="embedding_v2",
    index_type="AUTOINDEX",
    metric_type="COSINE",
)

client.create_index(
    collection_name="product_catalog",
    index_params=index_params,
)

Bestehende Entitäten weisen für „ embedding_v2 “ den Wert „ NULL “ auf und werden bei der Suche nach diesem Feld übersprungen. Um bestehende Entitäten über „ embedding_v2 “ durchsuchbar zu machen, schreiben Sie nicht-NULL-Vektorwerte mittels „Upsert“ oder eines Backfill-Workflows. Neue Entitäten können beim Einfügen den Wert „ embedding_v2 “ enthalten.

Eine Funktion und das von ihr generierte Vektorfeld hinzufügenCompatible with Milvus 3.0.x

Verwenden Sie diesen Workflow, wenn Milvus ein neues Vektorfeld aus Daten generieren soll, die bereits in einer bestehenden Sammlung gespeichert sind. Der Vorgang fügt drei zugehörige Schemaelemente hinzu:

  • Eine Funktionsdefinition, die aus einem oder mehreren vorhandenen Eingabefeldern liest.

  • Ein neues Vektorfeld, das die Ausgabe der Funktion speichert.

  • Eine Indexdefinition, die an das neue Vektorfeld gebunden ist.

Beispielsweise liest eine BM25-Funktion ein vorhandenes Feld „ VARCHAR “ aus und generiert ein Feld „ SPARSE_FLOAT_VECTOR “ für die lexikalische Suche. Eine MinHash-Funktion generiert ein Feld „ BINARY_VECTOR “ zur Erkennung von Beinahe-Duplikaten. Dieser Workflow fügt das Eingabefeld der Funktion nicht hinzu und ersetzt es auch nicht.

Diese Funktion erfordert Storage V3. Anweisungen zur Aktivierung und Hinweise zur Kompatibilität finden Sie unter „Storage V3“.

Das Hinzufügen einer Funktion und ihres generierten Vektorfeldes zu einer bestehenden Sammlung erfordert zudem eine Schema- und eine Speicherversionskomprimierung. Milvus lehnt die Anfrage ab, wenn eine dieser Einstellungen deaktiviert ist. Diese zusätzlichen Voraussetzungen gelten nur bei der Änderung einer bestehenden Sammlung; bei der Definition der Funktion im ursprünglichen Sammlungsschema wird dieser Workflow zum Nachfüllen bestehender Daten nicht verwendet.

Die unterstützte Funktion bestimmt den Typ des generierten Vektorfeldes:

FunktionTyp des generierten VektorfeldesTypisches EingabefeldTypischer Anwendungsfall
BM25SPARSE_FLOAT_VECTOREin „ VARCHAR “-Feld mit aktiviertem AnalysatorLexikalische Suche und Stichwortrelevanz
MINHASHBINARY_VECTOREin „ VARCHAR “-FeldErkennung von Beinahe-Duplikaten

Einzelheiten zur Funktionsweise der einzelnen Funktionen finden Sie unter „BM25-Funktion “ und „MinHash-Funktion“.

Das generierte Vektorfeld darf in der Sammlung noch nicht vorhanden sein und darf nicht nullfähig sein. Das Eingabefeld der Funktion muss bereits vorhanden sein.

Beispiel: Hinzufügen einer BM25-Funktion und ihres generierten spärlichen Vektorfeldes

Im folgenden Beispiel werden eine BM25-Funktion namens „ text_bm25 “ und das von ihr generierte spärliche Vektorfeld namens „ text_sparse “ zu einer bestehenden Sammlung hinzugefügt. Die Sammlung muss bereits über ein Feld „ VARCHAR “ namens „ text “ verfügen, für das der Analysator aktiviert ist.

from pymilvus import DataType, Function, FunctionType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

sparse_field = client.create_field_schema(
    name="text_sparse",
    data_type=DataType.SPARSE_FLOAT_VECTOR,
    desc="BM25-generated sparse vector field",
)

bm25_function = Function(
    name="text_bm25",
    input_field_names=["text"],
    output_field_names=["text_sparse"],
    function_type=FunctionType.BM25,
)

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="text_sparse",
    index_type="SPARSE_INVERTED_INDEX",
    metric_type="BM25",
    params={
        "inverted_index_algo": "DAAT_MAXSCORE",
        "bm25_k1": 1.2,
        "bm25_b": 0.75,
    },
)

client.add_function_field(
    collection_name="product_catalog",
    field_schema=sparse_field,
    func=bm25_function,
    index_params=index_params,
)

Das Objekt „ index_params “ muss genau eine Indexdefinition für das neue Funktionsausgabefeld enthalten. Milvus fügt die Funktion, ihr generiertes Vektorfeld und die Definition des gebundenen Indexes im Rahmen derselben Schemaänderung hinzu. Rufen Sie „ create_index() “ nicht separat nach „ add_function_field() “ auf.

Konzeptionell fügt dieser Vorgang die folgenden Definitionen für die Funktion, das generierte Ausgabefeld und den gebundenen Index hinzu:

New Function:
  name: "text_bm25"
  type: BM25
  input_field_names: ["text"]
  output_field_names: ["text_sparse"]

New generated output field:
  name: "text_sparse"
  data_type: SPARSE_FLOAT_VECTOR
  nullable: false

Bound index:
  field_name: "text_sparse"
  index_type: SPARSE_INVERTED_INDEX
  metric_type: BM25

Nach erfolgreicher Anfrage gibt „ describe_collection() “ sowohl die neue „ text_bm25 “-Funktion als auch das generierte „ text_sparse “-Vektorfeld im Sammlungsschema zurück. Milvus generiert die Funktionsausgabe für neue Entitäten beim Speichern. Bei bestehenden Entitäten füllt Milvus das generierte Vektorfeld asynchron durch eine Kompaktierung im Hintergrund. Die Schemasichtbarkeit bestätigt, dass die Schemaaktualisierung erfolgreich war, zeigt jedoch nicht an, dass die Nachfüllung für jede bestehende Entität abgeschlossen ist. Informationen zum vollständigen BM25-Such-Workflow finden Sie unter „Volltextsuche“.

Milvus unterstützt außerdem MinHash-Funktionen und die von ihnen generierten binären Vektorfelder zur Erkennung von Beinahe-Duplikaten. Eine MinHash-Funktion verwendet „ FunctionType.MINHASH “ und schreibt in ein neues Ausgabefeld „ BINARY_VECTOR “. Details zur Konfiguration finden Sie unter „MinHash-Funktion“.

Felder und Funktionen aus einer bestehenden Sammlung entfernen

Sie können benutzerdefinierte Felder direkt entfernen, wenn sie nicht mehr Teil Ihres Sammlungsmodells sind. Um eine Funktion und das von ihr generierte Vektorfeld zu entfernen, löschen Sie die Funktion; Milvus entfernt das generierte Feld und dessen Index im Rahmen derselben Schemaänderung.

Benutzerdefinierte Felder entfernenCompatible with Milvus 3.0.x

Verwenden Sie „ drop_collection_field() “, um ein benutzerdefiniertes Skalar-, Vektor- oder StructArray-Feld zu entfernen, das nicht mehr Teil Ihres Kollektionsmodells ist.

Das Löschen eines Feldes ändert zunächst das Kollektionsschema und die Sichtbarkeit des Feldes:

  • Nachdem „ drop_collection_field() “ erfolgreich ausgeführt wurde, wird das Sammlungsschema aktualisiert: „ describe_collection() “ gibt das gelöschte Feld nicht mehr zurück, und Abfragen oder Suchvorgänge können das Feld nicht mehr in „ output_fields “ zurückgeben oder in Ausdrücken verwenden.

  • Indizes, die auf dem entfernten Feld erstellt wurden, werden im Rahmen der Schemaaktualisierung bereinigt.

Die Bereinigung des Speicherplatzes erfolgt getrennt von der Schemabereinigung. Weitere Informationen finden Sie unter „Wann wird Speicherplatz nach dem Löschen eines Feldes freigegeben?“.

Beispiel: Ein benutzerdefiniertes Skalarfeld löschen

Das folgende Beispiel geht davon aus, dass „ experiment_tag “ ein benutzerdefiniertes Skalarfeld in „ product_catalog “ ist, und entfernt es aus der Sammlung.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.drop_collection_field(
    collection_name="product_catalog",
    field_name="experiment_tag",
)

Nach dem Löschen eines Feldes können Sie ` describe_collection() ` aufrufen, um zu überprüfen, ob das Feld nicht mehr Teil des Schemas ist.

Beispiel: Ein StructArray-Feld löschen

Das folgende Beispiel geht davon aus, dass „ chunks “ ein StructArray-Feld in „ my_collection “ ist, und entfernt es aus der Sammlung.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.drop_collection_field(
    collection_name="my_collection",
    field_name="chunks",
)

Beispiel: Ein benutzerdefiniertes Vektorfeld entfernen

Sie können ein Vektorfeld mit derselben Methode ` drop_collection_field() ` entfernen, allerdings muss die Sammlung nach dem Entfernen noch mindestens ein Vektorfeld enthalten. Dies ist nützlich für Sammlungen, die vorübergehend mehrere Vektordarstellungen enthalten und später auf eine davon standardisiert werden.

Das folgende Beispiel geht davon aus, dass „ image_vector “ ein benutzerdefiniertes Vektorfeld in „ hybrid_catalog “ ist und dass die Sammlung noch ein weiteres Vektorfeld enthält, beispielsweise „ text_vector “.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.drop_collection_field(
    collection_name="hybrid_catalog",
    field_name="image_vector",
)

Ist image_vector das letzte Vektorfeld in der Sammlung, wird die Löschoperation abgelehnt.

Eine Funktion und ihr generiertes Vektorfeld löschenCompatible with Milvus 3.0.x

Verwenden Sie diese Operation, wenn Sie eine Funktion oder das von ihr generierte Vektorfeld nicht mehr benötigen, z. B. eine BM25-Funktion und das von ihr generierte spärliche Vektorfeld.

Rufen Sie „ drop_function_field() “ mit dem Namen der Funktion auf. Milvus entfernt die Funktion, ihr generiertes Vektorfeld und den zugehörigen Index, wobei die Eingabefelder der Funktion erhalten bleiben.

Beispiel: Löschen einer BM25-Funktion und ihres generierten spärlichen Vektorfeldes

Das folgende Beispiel geht davon aus, dass „ text_bm25 “ eine BM25-Funktion in „ product_catalog “ ist und ein spärliches Vektorausgabefeld namens „ text_sparse “ generiert.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.drop_function_field(
    collection_name="product_catalog",
    function_name="text_bm25",
)

Nach erfolgreichem Abschluss des Vorgangs gibt „ describe_collection() “ die entfernte Funktion oder das von ihr generierte Vektorfeld nicht mehr zurück. Die Eingabefelder der Funktion verbleiben im Schema.

Wenn das Entfernen des Funktionsausgabefelds dazu führen würde, dass die Sammlung kein Vektorfeld mehr enthält, wird der Vorgang abgelehnt.

FAQ

Welche Methode sollte ich verwenden, um ein Feld oder eine Funktion hinzuzufügen?

Verwenden Sie „ add_collection_field() “, um ein benutzerdefiniertes Skalar- oder Vektorfeld hinzuzufügen.

Verwenden Sie „ add_collection_struct_field() “, um ein „StructArray“-Feld hinzuzufügen, wenn Sie ein Array-Feld benötigen, dessen Elemente dasselbe „Struct“-Schema haben.

Verwenden Sie „ add_function_field() “, um eine Funktion, das daraus generierte Vektorfeld und die Definition des gebundenen Indexes in derselben Schemaänderung hinzuzufügen.

Warum müssen hinzugefügte benutzerdefinierte Felder nullfähig sein?

Bestehende Entitäten wurden eingefügt, bevor das neue Feld existierte, daher verfügen sie über keine Werte für dieses Feld. Durch die Einstellung „ nullable=True “ stellt Milvus den fehlenden Wert als „ NULL “ dar, bis Ihre Anwendung einen Wert schreibt oder – bei Skalarfeldern – bis ein Standardwert gilt.

Diese Regel gilt für benutzerdefinierte Skalarfelder und benutzerdefinierte Vektorfelder, die mit „ add_collection_field() “ hinzugefügt wurden, sowie für StructArray-Felder, die mit „ add_collection_struct_field() “ hinzugefügt wurden. Sie gilt nicht für das von einer Funktion generierte Vektorfeld, das nicht nullfähig sein kann.

Was passiert mit bestehenden Entitäten, nachdem ich ein benutzerdefiniertes Feld hinzugefügt habe?

Bei einem benutzerdefinierten Skalarfeld geben bestehende Entitäten „ NULL “ zurück, es sei denn, Sie legen einen „ default_value “ fest. Wenn Sie einen „ default_value “ festlegen, geben bestehende Entitäten diesen Standardwert zurück.

Bei einem benutzerdefinierten Vektorfeld haben bestehende Entitäten den Wert „ NULL “ für das neue Vektorfeld. Bei der Vektorsuche nach dem hinzugefügten Feld werden Entitäten übersprungen, deren Vektorwert „ NULL “ ist. Um bestehende Entitäten über das neue Vektorfeld durchsuchbar zu machen, schreiben Sie Nicht-NULL-Vektorwerte per „upsert“ oder über einen Backfill-Workflow. Neue Entitäten können das neue Vektorfeld beim Einfügen bereits enthalten.

Bei einem StructArray-Feld geben bestehende Entitäten für das neue StructArray-Feld über alle seine Unterfelder hinweg den Wert „ NULL “ zurück. Neue Entitäten müssen entweder für alle Unterfelder den Wert „ NULL “ oder gültige Werte für alle Unterfelder bereitstellen.

Kann ich einer bestehenden Sammlung die lexikalische BM25-Suche hinzufügen?

Ja. Wenn die Sammlung bereits über ein „ VARCHAR “-Feld mit aktiviertem Analysator verfügt, können Sie eine BM25-Funktion und das von ihr generierte spärliche Vektorfeld für die lexikalische Suche hinzufügen. In diesem Workflow fügt Milvus die Funktion, das neue Ausgabefeld „ SPARSE_FLOAT_VECTOR “ und die Definition des gebundenen Indexes im Rahmen derselben Schemaänderung hinzu. Sie können in diesem Schemaänderungs-Workflow kein bestehendes „ TEXT “-Feld als BM25-Eingabe verwenden. Um eine „ TEXT “-Eingabe zu nutzen, definieren Sie das Feld und die BM25-Funktion beim Erstellen der Sammlung.

Geben Sie beim Aufruf von „ add_function_field() “ ein „ index_params “-Objekt an, das einen „ SPARSE_INVERTED_INDEX “-Index mit „ metric_type="BM25" “ für das neue Ausgabefeld enthält. Milvus bindet die Indexdefinition im Rahmen derselben Schemaänderung an das generierte Feld.

Wie lösche ich eine Funktion und ihr generiertes Vektorfeld?

Rufen Sie „ drop_function_field() “ mit dem Namen der Funktion auf. In diesem Schemaänderungs-Workflow entfernt Milvus die Funktion, ihr generiertes Vektorfeld und den zugehörigen Index gemeinsam, während die Eingabefelder der Funktion erhalten bleiben.

Muss ich nach der Änderung eines Sammlungsschemas warten?

In der Regel ist keine manuelle Wartezeit erforderlich. Wenn Ihr nächster Vorgang vom aktualisierten Schema abhängt, können Sie zunächst ` describe_collection() ` aufrufen, um das Schema zu überprüfen, das Milvus aktuell zurückgibt.

In einer verteilten Bereitstellung kann es zu einer kurzen Übertragungsphase kommen, während die Milvus-Komponenten die Metadaten der Sammlung aktualisieren. Sollte ein Vorgang unmittelbar nach der Schemaänderung mit einem schemabezogenen Fehler fehlschlagen, aktualisieren Sie das Schema und wiederholen Sie den Vorgang.

Wann wird Speicherplatz nach dem Löschen eines Feldes freigegeben?

Durch das Entfernen eines Feldes wird dieses aus dem aktuellen Schema und der Sichtbarkeit bei normalen Abfragen/Suchen entfernt, jedoch werden historische Daten für dieses Feld nicht sofort physisch aus dem Objektspeicher gelöscht.

Speicherplatz kann später während der Komprimierung freigegeben werden. Die Komprimierung ist ein Hintergrundprozess, der vorhandene Datendateien in neue, kompaktere Dateien umstrukturiert. Nachdem ein Feld entfernt wurde, entsprechen die neu komprimierten Dateien dem aktuellen Schema und lassen das entfernte Feld weg. Milvus garantiert keine sofortige oder zeitlich festgelegte Speicherplatzreduzierung nach dem Entfernen eines Feldes.

Was passiert, wenn ich ein Skalarfeld mit demselben Namen wie einen dynamischen Feldschlüssel hinzufüge?

Wenn dynamische Felder aktiviert sind, können Sie ein Skalarfeld mit demselben Namen wie ein vorhandener dynamischer Feldschlüssel hinzufügen. Das neue Skalarfeld maskiert den dynamischen Feldschlüssel in der normalen Abfrageausgabe, die ursprünglichen dynamischen Daten bleiben jedoch unter $meta erhalten.

Wenn beispielsweise vorhandene Entitäten einen dynamischen Schlüssel namens „ source “ speichern und Sie später ein Skalarfeld namens „ source “ hinzufügen, bezieht sich die normale Ausgabe für „ source “ auf das Skalarfeld. Um auf den ursprünglichen dynamischen Wert zuzugreifen, verwenden Sie die Pfadsyntax „ $meta “, z. B. „ $meta["source"] “.