milvus-logo
LFAI
Home
  • Guia do utilizador

Gerir o esquema

Este tópico introduz o esquema no Milvus. O esquema é utilizado para definir as propriedades de uma coleção e os campos que a compõem.

Esquema de campo

Um esquema de campo é a definição lógica de um campo. É a primeira coisa a definir antes de definir um esquema de coleção e gerir colecções.

O Milvus suporta apenas um campo de chave primária numa coleção.

Propriedades do esquema de campo

PropriedadesDescrição Nota
name Nome do campo na coleção a criar Tipo de dados: String.
Obrigatório
dtype Tipo de dados do campo Obrigatório
description Descrição do campo Tipo de dados: String.
Facultativo
is_primary Definir ou não o campo como campo de chave primária Tipo de dados: Booleano (true ou false).
Obrigatório para o campo de chave primária
auto_id (Obrigatório para o campo de chave primária) Comutador para ativar ou desativar a atribuição automática de ID (chave primária). True ou False
max_length (Obrigatório para o campo VARCHAR) Comprimento máximo das cadeias de caracteres que podem ser inseridas. [1, 65,535]
dim Dimensão do vetor Tipo de dado: Integer ∈[1, 32768].
Obrigatório para um campo vetorial denso. Omitir para um campo vetorial esparso.
is_partition_key Se este campo é um campo de chave de partição. Tipo de dados: Booleano (true ou false).

Criar um esquema de campo

Para reduzir a complexidade das inserções de dados, o Milvus permite-lhe especificar um valor por defeito para cada campo escalar durante a criação do esquema de campo, excluindo o campo da chave primária. Isto indica que se deixar um campo vazio ao inserir dados, aplica-se o valor por defeito especificado para este campo.

Criar um esquema de campos normal:

from pymilvus import 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)

Cria um esquema de campo com valores de campo predefinidos:

from pymilvus import 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 dados suportados

DataType define o tipo de dados que um campo contém. Diferentes campos suportam diferentes tipos de dados.

  • O campo de chave primária suporta:

    • INT64: numpy.int64
    • VARCHAR: VARCHAR
  • O campo Scalar suporta:

    • BOOL: Booleano (true ou 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 como um tipo de dados composto está disponível. Um campo JSON inclui pares chave-valor. Cada chave é uma cadeia de caracteres e um valor pode ser um número, cadeia de caracteres, valor booleano, matriz ou lista. Para obter detalhes, consulte JSON: um novo tipo de dados.

  • O campo Vetor suporta:

    • BINARY_VECTOR: armazena dados binários como uma sequência de 0s e 1s, usados para representação compacta de recursos no processamento de imagens e na recuperação de informações.
    • FLOAT_VECTOR: Armazena números de ponto flutuante de 32 bits, normalmente utilizados na computação científica e na aprendizagem automática para representar números reais.
    • FLOAT16_VECTOR: Armazena números de vírgula flutuante de meia precisão de 16 bits, utilizados em aprendizagem profunda e cálculos de GPU para eficiência de memória e largura de banda.
    • BFLOAT16_VECTOR: Armazena números de vírgula flutuante de 16 bits com precisão reduzida, mas com o mesmo intervalo de expoentes que o Float32, popular na aprendizagem profunda para reduzir a memória e os requisitos computacionais sem afetar significativamente a precisão.
    • SPARSE_FLOAT_VECTOR: armazena uma lista de elementos não nulos e os respectivos índices, utilizados para representar vectores esparsos. Para mais informações, consulte Vectores esparsos.

    O Milvus suporta múltiplos campos vectoriais numa coleção. Para obter mais informações, consulte Pesquisa híbrida.

Esquema de coleção

Um esquema de coleção é a definição lógica de uma coleção. Normalmente, é necessário definir o esquema de campo antes de definir um esquema de coleção e gerir colecções.

Propriedades do esquema de coleção

PropriedadesDescrição Nota
field Campos da coleção a criar Obrigatório
description Descrição da coleção Tipo de dados: String.
Facultativo
partition_key_field Nome de um campo concebido para atuar como chave de partição. Tipo de dados: String.
Facultativo
enable_dynamic_field Ativar ou não o esquema dinâmico Tipo de dados: Boolean (true ou false).
Opcional, a predefinição é False.
Para mais informações sobre o esquema dinâmico, consulte Esquema dinâmico e os manuais do utilizador para gerir colecções.

Criar um esquema de coleção

Defina os esquemas de campo antes de definir um esquema de coleção.
from pymilvus import 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")

Crie uma coleção com o esquema especificado:

from pymilvus import Collection
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
  • Pode definir o número do fragmento com shards_num.
  • Pode definir o servidor Milvus no qual pretende criar uma coleção, especificando o alias em using.
  • Pode ativar a funcionalidade de chave de partição num campo definindo is_partition_key para True no campo, se necessitar de implementar um multi-tenancy baseado em chave de partição.
  • Pode ativar o esquema dinâmico definindo enable_dynamic_field para True no esquema da coleção se precisar de ativar o campo dinâmico.


Também pode criar uma coleção com Collection.construct_from_dataframe, que gera automaticamente um esquema de coleção a partir de DataFrame e cria uma coleção.

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
    )

O que se segue

Traduzido porDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?