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

Propriedades Descrição do campo 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 de bytes para cadeias que podem ser inseridas. Note que os caracteres multibyte (por exemplo, caracteres Unicode) podem ocupar mais do que um byte cada, por isso certifique-se de que o comprimento em bytes das cadeias inseridas não excede o limite especificado. [1, 65,535]
dim Dimensão do vetor Tipo de dados: Integer ∈[1, 32768].
Obrigatório para um campo de vetor 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

Propriedades Descrição das propriedades 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,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)
  • 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 chaves 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?