Управление схемой
В этой теме рассказывается о схемах в 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: новый тип данных.
- BOOL: Boolean (
Поддерживается векторное поле:
- 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
)
Что дальше
- Узнайте, как подготовить схему при управлении коллекциями.
- Подробнее о динамической схеме.
- Подробнее о разделе-ключе в Multi-tenancy.