🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Руководство пользователя
  • Home
  • Docs
  • Руководство пользователя

  • Схема и поля данных

  • Объяснение схемы

Управление схемой

В этой теме рассказывается о схемах в Milvus. Схема используется для определения свойств коллекции и полей в ней.

Схема поля

Схема поля - это логическое определение поля. Это первое, что необходимо определить, прежде чем определять схему коллекции и управлять коллекциями.

Milvus поддерживает только одно поле первичного ключа в коллекции.

Свойства схемы поля

Свойства Описание Примечание
name Имя создаваемого поля в коллекции Тип данных: Строка.
Обязательно
dtype Тип данных поля Обязательный
description Описание поля Тип данных: Строка.
Необязательно.
is_primary Устанавливать ли поле в качестве поля первичного ключа или нет Тип данных: Boolean (true или false).
Обязательно для поля первичного ключа
auto_id (Обязательно для поля первичного ключа) Переключатель для включения или отключения автоматического присвоения идентификатора (первичного ключа). True или False
max_length (Обязательно для поля VARCHAR) Максимальная длина байта для строк, разрешенных к вставке. Обратите внимание, что многобайтовые символы (например, символы Юникода) могут занимать более одного байта каждый, поэтому убедитесь, что длина байта вставляемых строк не превышает указанного предела. [1, 65,535]
dim Размерность вектора Тип данных: Integer ∈[1, 32768].
Обязательно для плотного векторного поля. Опустите для разреженного векторного поля.
is_partition_key Является ли это поле полем с ключом раздела. Тип данных: Булево (true или false).

Создание схемы поля

Чтобы уменьшить сложность при вставке данных, Milvus позволяет указать значение по умолчанию для каждого скалярного поля при создании схемы поля, за исключением поля первичного ключа. Это означает, что если вы оставите поле пустым при вставке данных, то к нему будет применено значение по умолчанию, указанное вами для этого поля.

Создайте обычную схему поля:

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)

Создать схему поля со значениями по умолчанию:

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")
]

Поддерживаемые типы данных

DataType определяет тип данных, которые содержит поле. Разные поля поддерживают разные типы данных.

  • Поле первичного ключа поддерживает:

    • INT64: numpy.int64
    • VARCHAR: VARCHAR
  • Скалярное поле поддерживает:

    • BOOL: Boolean (true или 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 как составной тип данных. Поле JSON состоит из пар ключ-значение. Каждый ключ - это строка, а значение может быть числом, строкой, булевым значением, массивом или списком. Подробнее см. в разделе JSON: новый тип данных.

  • Поддерживается векторное поле:

    • BINARY_VECTOR: хранит двоичные данные в виде последовательности 0 и 1, используется для компактного представления признаков при обработке изображений и поиске информации.
    • FLOAT_VECTOR: хранит 32-битные числа с плавающей точкой, широко используемые в научных вычислениях и машинном обучении для представления вещественных чисел.
    • FLOAT16_VECTOR: хранит 16-битные числа с плавающей точкой половинной точности, используемые в глубоком обучении и вычислениях на GPU для повышения эффективности использования памяти и пропускной способности.
    • BFLOAT16_VECTOR: хранит 16-битные числа с плавающей точкой с пониженной точностью, но с тем же диапазоном экспонент, что и Float32. Это популярно в глубоком обучении для снижения требований к памяти и вычислениям без существенного влияния на точность.
    • SPARSE_FLOAT_VECTOR: хранит список ненулевых элементов и соответствующих им индексов, используется для представления разреженных векторов. Для получения дополнительной информации обратитесь к разделу "Разреженные векторы".

    Milvus поддерживает несколько векторных полей в коллекции. Дополнительные сведения см. в разделе Гибридный поиск.

Схема коллекции

Схема коллекции - это логическое определение коллекции. Обычно перед определением схемы коллекции и управлением коллекциями необходимо определить схему поля.

Свойства схемы коллекции

Свойства Описание Примечание
field Поля в создаваемой коллекции Обязательное
description Описание коллекции Тип данных: Строка.
Необязательно.
partition_key_field Имя поля, которое будет выступать в качестве ключа раздела. Тип данных: Строка.
Необязательно.
enable_dynamic_field Включать ли динамическую схему или нет. Тип данных: Булево (true или false).
Необязательно, по умолчанию False.
Подробнее о динамической схеме см. в разделе Динамическая схема и в руководствах пользователя по управлению коллекциями.

Создание схемы коллекции

Перед определением схемы коллекции определите схемы полей.
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")

Создайте коллекцию с указанной схемой:

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)
  • Вы можете определить номер шарда с помощью shards_num.
  • Вы можете определить сервер Milvus, на котором хотите создать коллекцию, указав псевдоним в using.
  • Вы можете включить функцию ключа раздела для поля, установив is_partition_key на True для поля, если вам нужно реализовать многопользовательскую работу на основе ключа раздела.
  • Можно включить динамическую схему, установив enable_dynamic_field на True в схеме коллекции, если необходимо включить динамическое поле.


Вы также можете создать коллекцию с помощью Collection.construct_from_dataframe, который автоматически генерирует схему коллекции из DataFrame и создает коллекцию.

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
    )

Что дальше

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?