La clase Collection en Milvus es similar a una tabla en MySQL, utilizada para organizar datos y compuesta por una o más particiones.

Creación de una colección

Una colección está compuesta por una o más particiones. Al crear una nueva colección, Milvus creará una partición predeterminada llamada _default. Para obtener más información, consulte la explicación de terminología relacionada con colecciones.

El siguiente ejemplo creará una colección llamada book con dos particiones, incluyendo un campo de clave primaria llamado book_id, un campo escalar INT64 llamado word_count y un campo de vector de punto flotante bidimensional llamado book_intro. Las aplicaciones reales a menudo utilizan vectores de dimensiones más altas que el ejemplo.

Modo de preparación

El modo es similar a definir la estructura de una tabla MYSQL.

La colección a crear debe contener un campo de clave primaria y un campo de vector. El campo de clave primaria admite tipos de datos INT64 y VarChar.

Primero, prepara los parámetros necesarios, incluida la estructura del campo, la estructura de la colección y el nombre de la colección.

Antes de definir la estructura de la colección, crea una estructura para cada campo en la colección. Para reducir la complejidad de la inserción de datos, Milvus te permite especificar un valor predeterminado para cada campo escalar (excepto el campo de clave primaria). Esto significa que si dejas un campo vacío al insertar datos, se usará el valor predeterminado configurado durante la creación de la estructura del campo.

from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
  name="book_id",
  dtype=DataType.INT64,
  is_primary=True,
)
book_name = FieldSchema(
  name="book_name",
  dtype=DataType.VARCHAR,
  max_length=200,
  default_value="Desconocido"  # El valor predeterminado es "Desconocido"
)
word_count = FieldSchema(
  name="word_count",
  dtype=DataType.INT64,
  default_value=9999  # El valor predeterminado es 9999
)
book_intro = FieldSchema(
  name="book_intro",
  dtype=DataType.FLOAT_VECTOR,
  dim=2
)
schema = CollectionSchema(
  fields=[book_id, book_name, word_count, book_intro],
  description="Búsqueda de libros de prueba",  # La descripción es "Búsqueda de libros de prueba"
  enable_dynamic_field=True  # Habilitar esquema dinámico
)
collection_name = "libro"

Tipo de Esquema Parámetro Descripción Opciones
FieldSchema name El nombre del campo a crear. N/A
dtype El tipo de datos del campo a crear. Campo de clave primaria: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Campos escalares: - DataType.BOOL (Booleano) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) Campos vectoriales: - BINARY_VECTOR (Vector binario) - FLOAT_VECTOR (Vector de punto flotante)
is_primary Un interruptor que controla si el campo es un campo de clave primaria. Este parámetro debe especificarse para los campos de clave primaria. True o False
auto_id Un interruptor para habilitar o deshabilitar la asignación automática de ID (clave primaria). Este parámetro debe especificarse para los campos de clave primaria y por defecto es False. True o False
max_length (Requerido para campos VARCHAR) La longitud máxima del string que se puede insertar. [1, 65,535]
default_value El valor por defecto del campo. Este parámetro solo se aplica a campos escalares no array y no JSON. No es posible especificar un valor por defecto para el campo de clave primaria. Para más información, consulta el parámetro default_value. N/A
dim (Requerido para campos vectoriales) La dimensión del vector. [1, 32,768]
description (Opcional) Descripción del campo. N/A
CollectionSchema fields Los campos a crear para la colección. N/A
description (Opcional) Descripción de la colección a crear. N/A
enable_dynamic_field Si se habilita el esquema dinámico. Tipo de dato: Booleano (true o false). Opcional, por defecto es False. Para más información sobre el esquema dinámico, consulta la guía del usuario para el esquema dinámico y la gestión de colecciones.
collection_name El nombre de la colección a crear. N/A

Crear una colección con esquema

A continuación, crea una colección con el esquema especificado.

from pymilvus import Collection
colección = Colección(
    nombre=nombre_colección,
    esquema=esquema,
    usando='default',
    número_de_shards=2
    )
Parámetro Descripción Opciones
usando (opcional) Especifica el alias del servidor aquí y elige dónde crear la colección en el servidor Milvus. N/A
número_de_shards (opcional) El número de shards para la colección a crear. [1,16]
num_partitions (opcional) El número lógico de particiones para la colección a crear. [1,4096]
*kwargs: collection.ttl.seconds (opcional) El TTL de la colección es el tiempo de expiración de la colección. Los datos en la colección expirada se limpiarán y no participarán en búsquedas o consultas. Especifica el TTL en segundos. El valor debe ser 0 o mayor. 0 significa deshabilitar el TTL.

Limitaciones

Configuración de recursos

Característica Límite máximo
Longitud del nombre de la colección 255 caracteres
Número de particiones en la colección 4,096
Número de campos en la colección 64
Número de shards en la colección 16

Parámetro default_value

  • default_value se aplica solo a campos escalares no array y no JSON.
  • default_value no se aplica a la clave primaria.
  • El tipo de datos de default_value debe ser el mismo que el tipo de datos especificado en dtype. De lo contrario, pueden ocurrir errores.
  • En el caso de usar auto_id, no está permitido configurar todos los campos restantes para usar el valor predeterminado. En otras palabras, al realizar operaciones de inserción o actualización, debes especificar el valor de al menos un campo. De lo contrario, pueden ocurrir errores.

Cambiar el nombre de una colección

Si deseas cambiar el nombre de una colección, puedes interactuar con Milvus usando la API de cambio de nombre de colección. Esta guía te ayudará a entender cómo utilizar tu SDK elegido para cambiar el nombre de una colección existente.

En el siguiente fragmento de código, creamos una colección y la nombramos colección_antigua, y luego la renombramos a nueva_colección.

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
esquema = CollectionSchema(fields=[
...     FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
...     FieldSchema("vector_de_punto_flotante", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
colección = Collection(nombre="colección_antigua", esquema=esquema)
utility.rename_collection("colección_antigua", "nueva_colección") # Salida: True
utility.has_collection("nueva_colección") # Salida: False

Modificar una colección

Actualmente, la función TTL solo está disponible en Python.

colección.set_properties(propiedades={"colección.ttl.seconds": 1800})

El ejemplo anterior cambia el TTL de la colección a 1800 segundos.

Verificar si una colección existe

Verifica si la colección existe en Milvus.

from pymilvus import utility
utility.has_collection("libro")

Ver detalles de la colección

from pymilvus import Collection
colección = Collection("libro")  # Obtiene una colección existente.

colección.esquema                # Devuelve el CollectionSchema de la colección.
colección.descripcion           # Devuelve la descripción de la colección.
colección.nombre                  # Devuelve el nombre de la colección.
colección.está_vacía              # Devuelve un booleano que indica si la colección está vacía.
colección.num_entidades          # Devuelve el número de entidades en la colección.
colección.campo_primario         # Devuelve el schema.FieldSchema del campo de clave primaria.
colección.particiones            # Devuelve una lista de objetos [Partition].
colección.índices               # Devuelve una lista de objetos [Índice].
colección.propiedades            # Devuelve el tiempo de expiración de los datos en la colección.

Listar todas las colecciones

from pymilvus import utility
utility.list_collections()

Eliminar una colección

from pymilvus import utility
utility.drop_collection("libro")

Crear un alias de colección

from pymilvus import utility
utility.create_alias(
  nombre_colección = "libro",
  alias = "publicación"
)

Eliminar un alias de colección

from pymilvus import utility
utility.drop_alias(alias = "publicación")

Modificar un alias de colección

Modificar un alias existente para que apunte a una colección diferente. El siguiente ejemplo se basa en el escenario en el que el alias publicación fue creado originalmente para otra colección.

from pymilvus import utility
utility.alter_alias(
  collection_name = "libro",
  alias = "publicación"
)

Cargar una colección

Cómo cargar una colección en la memoria antes de realizar operaciones de búsqueda o consulta. En Milvus, todas las operaciones de búsqueda y consulta se ejecutan en la memoria.

Milvus permite a los usuarios cargar colecciones como réplicas múltiples para utilizar recursos adicionales de CPU y memoria de los nodos de consulta. Esta función mejora el QPS y el rendimiento general sin necesidad de hardware adicional. Antes de cargar una colección, asegúrate de haber creado un índice para ella.

from pymilvus import Collection, utility

colección = Collection("libro")
colección.load(replica_number=2)

utility.load_state("libro")

utility.loading_progress("libro")

Liberar una colección

Cómo liberar una colección después de operaciones de búsqueda o consulta para reducir el uso de memoria.

from pymilvus import Collection
colección = Collection("libro")
colección.release()