A classe Collection no Milvus é semelhante a uma tabela no MySQL, usada para organizar dados e composta por uma ou mais partições.

Criando uma coleção

Uma coleção é composta por uma ou mais partições. Ao criar uma nova coleção, o Milvus criará uma partição padrão chamada _default. Para mais informações, consulte a explicação de terminologia - relacionada a coleções.

O exemplo a seguir criará uma coleção chamada book com duas partições, incluindo um campo de chave primária chamado book_id, um campo escalar INT64 chamado word_count e um campo de vetor de ponto flutuante bidimensional denominado book_intro. Aplicações reais frequentemente usam vetores de dimensões mais elevadas do que o exemplo.

Modo de Preparação

O modo é semelhante à definição da estrutura de uma tabela MYSQL.

A coleção a ser criada deve conter um campo de chave primária e um campo de vetor. O campo de chave primária suporta os tipos de dados INT64 e VarChar.

Primeiro, prepare os parâmetros necessários, incluindo o esquema do campo, esquema da coleção e nome da coleção.

Antes de definir o esquema da coleção, crie um esquema para cada campo na coleção. Para reduzir a complexidade da inserção de dados, o Milvus permite que você especifique um valor padrão para cada campo escalar (exceto o campo de chave primária). Isso significa que se você deixar um campo vazio ao inserir dados, o valor padrão configurado durante a criação do esquema do campo será usado.

from pymilvus import CollectionSchema, FieldSchema, DataType
id_do_livro = FieldSchema(
  name="id_do_livro",
  dtype=DataType.INT64,
  is_primary=True,
)
nome_do_livro = FieldSchema(
  name="nome_do_livro",
  dtype=DataType.VARCHAR,
  max_length=200,
  default_value="Desconhecido"  # Valor padrão é "Desconhecido"
)
contagem_de_palavras = FieldSchema(
  name="contagem_de_palavras",
  dtype=DataType.INT64,
  default_value=9999  # Valor padrão é 9999
)
introducao_do_livro = FieldSchema(
  name="introducao_do_livro",
  dtype=DataType.FLOAT_VECTOR,
  dim=2
)
esquema = CollectionSchema(
  fields=[id_do_livro, nome_do_livro, contagem_de_palavras, introducao_do_livro],
  description="Busca de livros de teste",  # Descrição é "Busca de livros de teste"
  enable_dynamic_field=True  # Habilitar esquema dinâmico
)
nome_da_colecao = "livro"

Tipo de Esquema Parâmetro Descrição Opções
FieldSchema name O nome do campo a ser criado. N/A
dtype O tipo de dado do campo a ser criado. Campo de chave primária: - 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 de vetor: - BINARY_VECTOR (Vetor binário) - FLOAT_VECTOR (Vetor de ponto flutuante)
is_primary Um interruptor que controla se o campo é um campo de chave primária. Este parâmetro precisa ser especificado para campos de chave primária. True ou False
auto_id Um interruptor para habilitar ou desabilitar a atribuição automática de ID (chave primária). Este parâmetro precisa ser especificado para campos de chave primária e o padrão é False. True ou False
max_length (Necessário para campos VARCHAR) O comprimento máximo da string que pode ser inserida. [1, 65.535]
default_value O valor padrão do campo. Este parâmetro só se aplica a campos escalares não array e não JSON. Não é possível especificar um valor padrão para o campo de chave primária. Para mais informações, consulte o parâmetro default_value. N/A
dim (Necessário para campos de vetor) A dimensão do vetor. [1, 32.768]
description (Opcional) Descrição do campo. N/A
CollectionSchema fields Os campos a serem criados para a coleção. N/A
description (Opcional) Descrição da coleção a ser criada. N/A
enable_dynamic_field Se habilita esquema dinâmico. Tipo de dado: Booleano (true ou false). Opcional, o padrão é False. Para mais informações sobre esquema dinâmico, consulte o guia do usuário sobre gerenciamento dinâmico de esquema e coleção.
collection_name O nome da coleção a ser criada. N/A

Criação de uma Coleção com Esquema

Em seguida, crie uma coleção com o esquema especificado.

from pymilvus import Collection
collection = Collection(
    name=nome_da_colecao,
    schema=esquema,
    using='default',
    shards_num=2
    )
Parâmetro Descrição Opções
using (opcional) Especifique o alias do servidor aqui e escolha onde criar a coleção no servidor Milvus. N/A
shards_num (opcional) O número de shards para a coleção a ser criada. [1,16]
num_partitions (opcional) O número lógico de partições para a coleção a ser criada. [1,4096]
*kwargs: collection.ttl.seconds (opcional) O TTL da coleção é o tempo de expiração da coleção. Os dados na coleção expirada serão limpos e não participarão de buscas ou consultas. Especifique o TTL em segundos. O valor deve ser 0 ou maior. 0 significa desativar o TTL.

Limitações

Configuração de Recursos

Recurso Limite Máximo
Comprimento do Nome da Coleção 255 caracteres
Número de Partições na Coleção 4.096
Número de Campos na Coleção 64
Número de Shards na Coleção 16

Parâmetro default_value

  • default_value se aplica apenas a campos escalares não-array e não-JSON.
  • default_value não se aplica à chave primária.
  • O tipo de dados de default_value deve ser o mesmo que o tipo de dados especificado em dtype. Caso contrário, podem ocorrer erros.
  • No caso de usar auto_id, não é permitido definir todos os campos restantes para usar o valor padrão. Em outras palavras, ao realizar operações de inserção ou atualização, você precisa especificar o valor de pelo menos um campo. Caso contrário, podem ocorrer erros.

Renomeando uma Coleção

Se você deseja renomear uma coleção, pode interagir com o Milvus usando a API de renomeação de coleção. Este guia irá ajudá-lo a entender como usar o SDK escolhido para renomear uma coleção existente.

No trecho de código a seguir, criamos uma coleção e a nomeamos como colecao_antiga, e depois a renomeamos para colecao_nova.

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("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
colecao = Collection(name="colecao_antiga", schema=esquema)
utility.rename_collection("colecao_antiga", "colecao_nova") # Saída: True
utility.has_collection("colecao_nova") # Saída: False

Modificando uma Coleção

Atualmente, o recurso TTL está disponível apenas em Python.

colecao.set_properties(properties={"collection.ttl.seconds": 1800})

O exemplo acima altera o TTL da coleção para 1800 segundos.

Verificando se uma Coleção Existe

Verifique se a coleção existe no Milvus.

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

Verificando Detalhes da Coleção

from pymilvus import Collection
colecao = Collection("livro")  # Obtenha uma coleção existente.

colecao.esquema                # Retorna o CollectionSchema da coleção.
colecao.descricao           # Retorna a descrição da coleção.
colecao.nome                  # Retorna o nome da coleção.
colecao.esta_vazia              # Retorna um booleano indicando se a coleção está vazia.
colecao.num_entidades          # Retorna o número de entidades na coleção.
colecao.campo_primario         # Retorna o schema.FieldSchema do campo de chave primária.
colecao.particoes            # Retorna uma lista de objetos [Partição].
colecao.indices               # Retorna uma lista de objetos [Índice].
colecao.propriedades           # Retorna o tempo de expiração dos dados na coleção.

Listando todas as coleções

from pymilvus import utility
utility.list_collections()

Excluindo uma coleção

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

Criando um alias para uma coleção

from pymilvus import utility
utility.create_alias(
  collection_name = "livro",
  alias = "publicacao"
)

Excluindo um alias de coleção

from pymilvus import utility
utility.drop_alias(alias = "publicacao")

Modificar um alias de coleção

Modificar um alias existente para apontar para uma coleção diferente. O exemplo a seguir é baseado no cenário em que o alias publicação foi originalmente criado para outra coleção.

from pymilvus import utility
utility.alterar_alias(
  collection_name = "livro",
  alias = "publicação"
)

Carregar uma coleção

Como carregar uma coleção na memória antes de realizar operações de busca ou consulta. No Milvus, todas as operações de busca e consulta são executadas na memória.

O Milvus permite que os usuários carreguem coleções como réplicas múltiplas para utilizar recursos adicionais de CPU e memória dos nós de consulta. Essa funcionalidade melhora o QPS e o throughput geral sem hardware adicional. Antes de carregar uma coleção, certifique-se de ter criado um índice para ela.

from pymilvus import Collection, utility

colecao = Collection("livro")
colecao.carregar(numero_replicas=2)

utility.load_state("livro")

utility.progresso_carregamento("livro")

Liberar uma coleção

Como liberar uma coleção após operações de busca ou consulta para reduzir o uso de memória.

from pymilvus import Collection
collection = Collection("livro")
colecao.liberar()