milvus-logo
LFAI
Home
  • Guía del usuario

Gestionar esquema

Este tema presenta el esquema en Milvus. El esquema se utiliza para definir las propiedades de una colección y los campos que contiene.

Esquema de campo

Un esquema de campo es la definición lógica de un campo. Es lo primero que debe definir antes de definir un esquema de colección y gestionar colecciones.

Milvus sólo admite un campo de clave primaria en una colección.

Propiedades del esquema de campo

Propiedades Descripción Nota
name Nombre del campo de la colección que se va a crear Tipo de datos: Cadena.
Obligatorio
dtype Tipo de datos del campo Obligatorio
description Descripción del campo Tipo de datos: String: Cadena.
Opcional
is_primary Establecer o no el campo como clave primaria Tipo de datos: Booleano (true o false).
Obligatorio para el campo de clave primaria
auto_id (Obligatorio para el campo de clave primaria) Interruptor para activar o desactivar la asignación automática de ID (clave primaria). True o False
max_length (Obligatorio para el campo VARCHAR) Longitud máxima en bytes de las cadenas que se permite insertar. Tenga en cuenta que los caracteres multibyte (por ejemplo, caracteres Unicode) pueden ocupar más de un byte cada uno, por lo que debe asegurarse de que la longitud en bytes de las cadenas insertadas no supere el límite especificado. [1, 65,535]
dim Dimensión del vector Tipo de datos: Entero ∈[1, 32768].
Obligatorio para un campo vectorial denso. Omitir para un campo vectorial disperso.
is_partition_key Si este campo es un campo de clave de partición. Tipo de datos: Booleano (true o false).

Crear un esquema de campo

Para reducir la complejidad en las inserciones de datos, Milvus le permite especificar un valor por defecto para cada campo escalar durante la creación del esquema de campo, excluyendo el campo de clave primaria. Esto indica que si deja un campo vacío al insertar datos, se aplicará el valor por defecto que haya especificado para este campo.

Crear un esquema de campo normal:

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)

Crear un esquema de campo con valores de campo por defecto:

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")
]

Tipos de datos admitidos

DataType define el tipo de datos que contiene un campo. Diferentes campos soportan diferentes tipos de datos.

  • El campo clave primaria soporta:

    • INT64: numpy.int64
    • VARCHAR: VARCHAR
  • El campo Scalar soporta:

    • BOOL: Boolean (true o 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 está disponible como tipo de datos compuesto. Un campo JSON se compone de pares clave-valor. Cada clave es una cadena, y un valor puede ser un número, una cadena, un valor booleano, un array o una lista. Para más información, consulta JSON: un nuevo tipo de datos.

  • Soporta campos vectoriales:

    • BINARY_VECTOR: Almacena datos binarios como una secuencia de 0 y 1. Se utiliza para la representación compacta de características en el procesamiento de imágenes y la recuperación de información.
    • FLOAT_VECTOR: Almacena números de coma flotante de 32 bits, utilizados habitualmente en computación científica y aprendizaje automático para representar números reales.
    • FLOAT16_VECTOR: Almacena números de coma flotante de 16 bits y media precisión, utilizados en el aprendizaje profundo y los cálculos de GPU para la eficiencia de la memoria y el ancho de banda.
    • BFLOAT16_VECTOR: Almacena números de punto flotante de 16 bits con precisión reducida pero el mismo rango de exponentes que Float32, popular en el aprendizaje profundo para reducir los requisitos de memoria y computación sin afectar significativamente a la precisión.
    • SPARSE_FLOAT_VECTOR: Almacena una lista de elementos distintos de cero y sus índices correspondientes, utilizados para representar vectores dispersos. Para más información, consulte Vectores dispersos.

    Milvus soporta múltiples campos vectoriales en una colección. Para más información, consulte Búsqueda híbrida.

Esquema de colección

Un esquema de colección es la definición lógica de una colección. Normalmente es necesario definir el esquema de campo antes de definir un esquema de colección y gestionar colecciones.

Propiedades del esquema de la colección

Propiedades Descripción Nota
field Campos de la colección a crear Obligatorio
description Descripción de la colección Tipo de datos: Cadena.
Opcional
partition_key_field Nombre de un campo destinado a actuar como clave de partición. Tipo: String: String.
Opcional
enable_dynamic_field Habilitar o no el esquema dinámico Tipo de datos: Booleano (true o false).
Opcional, por defecto False.
Para más detalles sobre el esquema dinámico, consulte Esquema dinámico y las guías de usuario para la gestión de colecciones.

Crear un esquema de colección

Defina los esquemas de campo antes de definir un esquema de colección.
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")

Cree una colección con el esquema especificado:

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)
  • Puede definir el número de fragmento con shards_num.
  • Puede definir el servidor Milvus en el que desea crear una colección especificando el alias en using.
  • Puede habilitar la característica de clave de partición en un campo configurando is_partition_key a True en el campo si necesita implementar multi-tenancy basado en clave de partición.
  • Puede habilitar el esquema dinámico configurando enable_dynamic_field en True en el esquema de la colección si necesita habilitar el campo dinámico.


También puede crear una colección con Collection.construct_from_dataframe, que genera automáticamente un esquema de colección a partir de DataFrame y crea una colección.

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
    )

A continuación

Traducido porDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?