milvus-logo
LFAI
Home
  • Benutzerhandbuch

Schema verwalten

In diesem Thema wird das Schema in Milvus vorgestellt. Ein Schema wird verwendet, um die Eigenschaften einer Sammlung und die darin enthaltenen Felder zu definieren.

Feldschema

Ein Feldschema ist die logische Definition eines Feldes. Es ist das erste, was Sie definieren müssen, bevor Sie ein Sammlungsschema definieren und Sammlungen verwalten können.

Milvus unterstützt nur ein Primärschlüsselfeld in einer Sammlung.

Eigenschaften des Feldschemas

Eigenschaften Beschreibung Hinweis
name Name des Feldes in der zu erstellenden Sammlung Datentyp: String.
Obligatorisch
dtype Datentyp des Feldes Obligatorisch
description Beschreibung des Feldes Datentyp: Zeichenfolge.
Optional
is_primary Angabe, ob das Feld als Primärschlüsselfeld festgelegt werden soll oder nicht Datentyp: Boolescher Wert (true oder false).
Obligatorisch für das Primärschlüsselfeld
auto_id (Obligatorisch für das Primärschlüsselfeld) Schalter zum Aktivieren oder Deaktivieren der automatischen ID-Zuweisung (Primärschlüssel). True oder False
max_length (Obligatorisch für das VARCHAR-Feld) Maximale Bytelänge für Zeichenketten, die eingefügt werden können. Beachten Sie, dass Multibyte-Zeichen (z. B. Unicode-Zeichen) jeweils mehr als ein Byte belegen können. Stellen Sie daher sicher, dass die Bytelänge der eingefügten Zeichenketten den angegebenen Grenzwert nicht überschreitet. [1, 65,535]
dim Dimension des Vektors Datentyp: Integer ∈[1, 32768].
Obligatorisch für ein dichtes Vektorfeld. Bei einem spärlichen V ektorfeld weglassen.
is_partition_key Angabe, ob dieses Feld ein Partitionsschlüsselfeld ist. Datentyp: Boolescher Wert (true oder false).

Ein Feldschema erstellen

Um die Komplexität beim Einfügen von Daten zu verringern, ermöglicht Milvus die Angabe eines Standardwerts für jedes Skalarfeld während der Erstellung des Feldschemas, außer für das Primärschlüsselfeld. Dies bedeutet, dass, wenn Sie ein Feld beim Einfügen von Daten leer lassen, der von Ihnen für dieses Feld angegebene Standardwert gilt.

Erstellen Sie ein reguläres Feldschema:

from pymilvus import DataType, FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")

# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)

Erstellen Sie ein Feldschema mit Standardfeldwerten:

from pymilvus import DataType, FieldSchema

fields = [
  FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
  # configure default value `25` for field `age`
  FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
  embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]

Unterstützte Datentypen

DataType definiert die Art der Daten, die ein Feld enthält. Verschiedene Felder unterstützen unterschiedliche Datentypen.

  • Primärschlüsselfeld unterstützt:

    • INT64: numpy.int64
    • VARCHAR: VARCHAR
  • Skalar-Feld unterstützt:

    • BOOL: Boolean (true oder false)
    • INT8: numpy.int8
    • INT16: numpy.int16
    • INT32: numpy.int32
    • INT64: numpy.int64
    • FLOAT: numpy.float32
    • DOUBLE: numpy.double
    • VARCHAR: VARCHAR
    • JSON: JSON
    • Array: Array

    JSON ist als zusammengesetzter Datentyp verfügbar. Ein JSON-Feld besteht aus Schlüssel-Werte-Paaren. Jeder Schlüssel ist eine Zeichenfolge, und ein Wert kann eine Zahl, eine Zeichenfolge, ein boolescher Wert, ein Array oder eine Liste sein. Einzelheiten finden Sie unter JSON: ein neuer Datentyp.

  • Vektorfeld unterstützt:

    • BINARY_VECTOR: Speichert binäre Daten als eine Folge von 0en und 1en, die für eine kompakte Merkmalsdarstellung in der Bildverarbeitung und beim Informationsabruf verwendet werden.
    • FLOAT_VECTOR: Speichert 32-Bit-Gleitkommazahlen, die häufig in der wissenschaftlichen Datenverarbeitung und beim maschinellen Lernen zur Darstellung reeller Zahlen verwendet werden.
    • FLOAT16_VECTOR: Speichert 16-Bit-Gleitkommazahlen mit halber Genauigkeit, die bei Deep Learning und GPU-Berechnungen für Speicher- und Bandbreiteneffizienz verwendet werden.
    • BFLOAT16_VECTOR: Speichert 16-Bit-Gleitkommazahlen mit verringerter Genauigkeit, aber demselben Exponentenbereich wie Float32, die beim Deep Learning zur Verringerung der Speicher- und Berechnungsanforderungen verwendet werden, ohne die Genauigkeit wesentlich zu beeinträchtigen.
    • SPARSE_FLOAT_VECTOR: Speichert eine Liste von Nicht-Null-Elementen und ihren entsprechenden Indizes, die zur Darstellung von Sparse-Vektoren verwendet werden. Weitere Informationen finden Sie unter Sparse Vectors.

    Milvus unterstützt mehrere Vektorfelder in einer Sammlung. Weitere Informationen finden Sie unter Hybride Suche.

Sammlungsschema

Ein Sammlungsschema ist die logische Definition einer Sammlung. Normalerweise müssen Sie das Feldschema definieren, bevor Sie ein Sammlungsschema definieren und Sammlungen verwalten können.

Eigenschaften des Sammlungsschemas

Eigenschaften Beschreibung Hinweis
field Felder in der zu erstellenden Sammlung Obligatorisch
description Beschreibung der Sammlung Datentyp: String.
Optional
partition_key_field Name eines Feldes, das als Partitionsschlüssel fungieren soll. Datentyp: String.
Optional
enable_dynamic_field Angabe, ob das dynamische Schema aktiviert werden soll oder nicht Datentyp: Boolescher Wert (true oder false).
Optional, Standardwert ist False.
Einzelheiten zum dynamischen Schema finden Sie unter Dynamisches Schema und in den Benutzerhandbüchern für die Verwaltung von Sammlungen.

Erstellen eines Sammlungsschemas

Definieren Sie die Feldschemata, bevor Sie ein Sammlungsschema definieren.
from pymilvus import DataType, FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")

# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)

# Set enable_dynamic_field to True if you need to use dynamic fields. 
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")

Erstellen Sie eine Sammlung mit dem angegebenen Schema:

from pymilvus import Collection, connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
  • Sie können die Shard-Nummer mit shards_num definieren.
  • Sie können den Milvus-Server definieren, auf dem Sie eine Sammlung erstellen möchten, indem Sie den Alias in using angeben.
  • Sie können die Partitionsschlüssel-Funktion für ein Feld aktivieren, indem Sie is_partition_key auf True für das Feld setzen, wenn Sie eine auf Partitionsschlüsseln basierende Mandantenfähigkeit implementieren möchten.
  • Sie können das dynamische Schema aktivieren, indem Sie enable_dynamic_field auf True im Sammlungsschema setzen, wenn Sie ein dynamisches Feld aktivieren müssen.


Sie können auch eine Sammlung mit Collection.construct_from_dataframe erstellen, die automatisch ein Sammelschema aus DataFrame generiert und eine Sammlung erstellt.

from pymilvus import Collection
import pandas as pd
df = pd.DataFrame({
    "id": [i for i in range(nb)],
    "age": [random.randint(20, 40) for i in range(nb)],
    "embedding": [[random.random() for _ in range(dim)] for _ in range(nb)],
    "position": "test_pos"
})

collection, ins_res = Collection.construct_from_dataframe(
    'my_collection',
    df,
    primary_field='id',
    auto_id=False
    )

Was kommt als Nächstes?

Übersetzt vonDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?