Класс Collection в Milvus аналогичен таблице в MySQL, используемой для организации данных и состоящей из одной или нескольких разделов.
Создание коллекции
Коллекция состоит из одного или нескольких разделов. При создании новой коллекции Milvus создаст раздел по умолчанию с именем _default
. Дополнительную информацию можно найти в разделе терминологии, связанной с коллекциями.
В следующем примере будет создана коллекция с именем book
с двумя разделами, включающими первичное поле ключа с именем book_id
, скалярное поле word_count
типа INT64
и двумерное поле векторов с плавающей запятой с именем book_intro
. Фактические приложения часто используют векторы более высокой размерности, чем в примере.
Режим подготовки
Этот режим похож на определение структуры таблицы MYSQL.
Необходимо, чтобы создаваемая коллекция содержала поле первичного ключа и векторное поле. Поле первичного ключа поддерживает типы данных INT64 и VarChar.
Сначала подготовьте необходимые параметры, включая схему поля, схему коллекции и имя коллекции.
Перед определением схемы коллекции создайте схему для каждого поля в коллекции. Чтобы уменьшить сложность вставки данных, Milvus позволяет вам указать значение по умолчанию для каждого скалярного поля (за исключением поля первичного ключа). Это означает, что если вы оставите поле пустым при вставке данных, будет использовано значение по умолчанию, настроенное во время создания схемы поля.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
is_primary=True,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
default_value="Unknown" # Значение по умолчанию - "Unknown"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # Значение по умолчанию - 9999
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, book_name, word_count, book_intro],
description="Поиск тестовой книги", # Описание - "Поиск тестовой книги"
enable_dynamic_field=True # Включить динамическую схему
)
collection_name = "book"
Тип схемы | Параметр | Описание | Опции |
---|---|---|---|
FieldSchema |
name |
Имя создаваемого поля. | N/A |
dtype |
Тип данных создаваемого поля. | Поле первичного ключа: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Скалярные поля: - DataType.BOOL (Boolean) - 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) Векторные поля: - BINARY_VECTOR (Бинарный вектор) - FLOAT_VECTOR (Вещественный вектор) |
|
is_primary |
Переключатель, управляющий является ли поле первичным ключом. Этот параметр должен быть указан для полей первичного ключа. | True или False |
|
auto_id |
Переключатель для включения или отключения автоматического присвоения ID (первичного ключа). Этот параметр должен быть указан для полей первичного ключа и по умолчанию установлен в False . |
True или False |
|
max_length (Обязательно для полей VARCHAR) |
Максимальная длина строки, которую можно вставить. | [1, 65,535] | |
default_value |
Значение по умолчанию поля. Этот параметр применяется только к скалярным полям (за исключением массивов и JSON полей). Нельзя указать значение по умолчанию для поля первичного ключа. Дополнительную информацию можно найти в параметре default_value . |
N/A | |
dim (Обязательно для векторных полей) |
Размерность вектора. | [1, 32,768] | |
description (Опционально) |
Описание поля. | N/A | |
CollectionSchema |
fields |
Поля, создаваемые для коллекции. | N/A |
description (Опционально) |
Описание создаваемой коллекции. | N/A | |
enable_dynamic_field |
Включить ли динамическую схему. Тип данных: Boolean (true или false ). Опционально, по умолчанию False . Дополнительную информацию о динамической схеме можно найти в руководстве пользователя по динамической схеме и управлению коллекциями. |
||
collection_name |
Имя создаваемой коллекции. | N/A |
Создание коллекции схемой
Затем создайте коллекцию с указанной схемой.
from pymilvus import Collection
collection = Collection(
name=collection_name,
schema=schema,
using='default',
shards_num=2
)
Параметр | Описание | Опции |
---|---|---|
using (необязательно) |
Укажите псевдоним сервера здесь и выберите, где создавать коллекцию в сервере Milvus. | Н/Д |
shards_num (необязательно) |
Количество шардов для создаваемой коллекции. | [1,16] |
num_partitions (необязательно) |
Логическое количество разделов для создаваемой коллекции. | [1,4096] |
*kwargs: collection.ttl.seconds (необязательно) |
Время жизни коллекции - время истечения срока действия коллекции. Данные в истекшей коллекции будут очищены и не будут участвовать в поиске или запросах. Укажите TTL в секундах. | Значение должно быть 0 или больше. 0 означает отключение TTL. |
Ограничения
Конфигурация ресурсов
Особенность | Максимальный предел |
---|---|
Длина названия коллекции | 255 символов |
Количество разделов в коллекции | 4,096 |
Количество полей в коллекции | 64 |
Количество шардов в коллекции | 16 |
Параметр default_value
-
default_value
применяется только к скалярным полям, кроме массивов и JSON. -
default_value
не применяется к первичному ключу. - Тип данных
default_value
должен быть таким же, как указанный вdtype
. В противном случае могут возникнуть ошибки. - В случае использования
auto_id
нельзя установить все оставшиеся поля для использования значения по умолчанию. Другими словами, при выполнении операций вставки или обновления нужно указать значение хотя бы для одного поля. В противном случае могут возникнуть ошибки.
Переименование коллекции
Если вы хотите переименовать коллекцию, вы можете взаимодействовать с Milvus, используя API переименования коллекции. Это руководство поможет вам понять, как использовать выбранное вами SDK для переименования существующей коллекции.
В следующем фрагменте кода мы создаем коллекцию с именем old_collection
и затем переименовываем ее в new_collection
.
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # Вывод: True
utility.has_collection("new_collection") # Вывод: False
Изменение коллекции
В настоящее время функция TTL доступна только в Python.
collection.set_properties(properties={"collection.ttl.seconds": 1800})
В приведенном примере изменяется TTL коллекции на 1800 секунд.
Проверка на существование коллекции
Убедитесь, что коллекция существует в Milvus.
from pymilvus import utility
utility.has_collection("book")
Получение информации о коллекции
from pymilvus import Collection
collection = Collection("book") # Получить существующую коллекцию.
collection.schema # Возвращает CollectionSchema коллекции.
collection.description # Возвращает описание коллекции.
collection.name # Возвращает имя коллекции.
collection.is_empty # Возвращает булево значение, указывающее, является ли коллекция пустой.
collection.num_entities # Возвращает количество сущностей в коллекции.
collection.primary_field # Возвращает schema.FieldSchema первичного ключа.
collection.partitions # Возвращает список объектов [Partition].
collection.indexes # Возвращает список объектов [Index].
collection.properties # Возвращает время истечения данных в коллекции.
Список всех коллекций
from pymilvus import utility
utility.list_collections()
Удаление коллекции
from pymilvus import utility
utility.drop_collection("book")
Создание псевдонима коллекции
from pymilvus import utility
utility.create_alias(
collection_name = "book",
alias = "publication"
)
Удаление псевдонима коллекции
from pymilvus import utility
utility.drop_alias(alias = "publication")
Изменение псевдонима коллекции
Измените существующий псевдоним, чтобы он указывал на другую коллекцию. В следующем примере предполагается, что псевдоним publication
был изначально создан для другой коллекции.
from pymilvus import utility
utility.alter_alias(
collection_name = "book",
alias = "publication"
)
Загрузка коллекции
Как загрузить коллекцию в память перед выполнением операций поиска или запроса. В Milvus все операции поиска и запроса выполняются в памяти.
Milvus позволяет пользователям загружать коллекции в виде нескольких реплик для использования дополнительных ресурсов ЦП и памяти узлов запросов. Эта функция повышает общую производительность запросов в секунду (QPS) и пропускную способность без дополнительного аппаратного обеспечения. Перед загрузкой коллекции убедитесь, что вы создали для нее индекс.
from pymilvus import Collection, utility
collection = Collection("book")
collection.load(replica_number=2)
utility.load_state("book")
utility.loading_progress("book")
Освобождение коллекции
Как освободить коллекцию после операций поиска или запроса для уменьшения использования памяти.
from pymilvus import Collection
collection = Collection("book")
collection.release()