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
ofalse
) - 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.
- BOOL: Boolean (
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
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
aTrue
en el campo si necesita implementar multi-tenancy basado en clave de partición. - Puede habilitar el esquema dinámico configurando
enable_dynamic_field
enTrue
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
- Aprenda a preparar esquemas al gestionar colecciones.
- Más información sobre el esquema dinámico.
- Más información sobre partition-key en Multi-tenancy.