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

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

  • Индексы

  • Скалярные индексы

  • Индекс растрового изображения

BITMAP

Битовая карта - это эффективная техника индексирования, разработанная для повышения производительности запросов к скалярным полям с низкой кардинальностью. Под кардинальностью понимается количество отдельных значений в поле. Поля с меньшим количеством отдельных элементов считаются низкокардинальными.

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

Обзор

Термин Bitmap объединяет два слова: Бит и Карта. Бит представляет собой наименьшую единицу данных в компьютере, которая может содержать только значение 0 или 1. Карта, в данном контексте, означает процесс преобразования и организации данных в соответствии с тем, какое значение должно быть присвоено 0 и 1.

Растровый индекс состоит из двух основных компонентов: растровых изображений и ключей. Ключи представляют собой уникальные значения в индексируемом поле. Для каждого уникального значения существует соответствующее битовое изображение. Длина этих битовых карт равна количеству записей в коллекции. Каждый бит в битовой карте соответствует одной записи в коллекции. Если значение индексируемого поля в записи совпадает с ключом, то соответствующий бит устанавливается в 1, в противном случае - в 0.

Рассмотрим коллекцию документов с полями Category и Public. Мы хотим получить документы, которые относятся к категории Tech и открыты для публики. В этом случае ключами для наших растровых индексов будут Tech и Public.

Bitmap indexing Растровое индексирование

Как показано на рисунке, растровые индексы для Category и Public будут следующими.

  • Tech: [1, 0, 1, 0, 0], что показывает, что только 1-й и 3-й документы попадают в категорию Tech.

  • Public: [1, 0, 0, 1, 0], что показывает, что только 1-й и 4-й документы открыты для публики.

Чтобы найти документы, соответствующие обоим критериям, мы выполняем побитовую операцию AND на этих двух битовых картах.

  • Tech AND Public: [1, 0, 0, 0, 0]

Полученное битовое изображение [1, 0, 0, 0, 0] указывает на то, что только первый документ(ID 1) удовлетворяет обоим критериям. Используя растровые индексы и эффективные побитовые операции, мы можем быстро сузить область поиска, избавившись от необходимости сканировать весь набор данных.

Создание растрового индекса

Чтобы создать растровый индекс в Milvus, используйте метод create_index() и установите параметр index_type в значение "BITMAP".

from pymilvus import MilvusClient

index_params = client.create_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
    field_name="category", # Name of the scalar field to be indexed
    index_type="BITMAP", # Type of index to be created
    index_name="category_bitmap_index" # Name of the index to be created
)

client.create_index(
    collection_name="my_collection", # Specify the collection name
    index_params=index_params
)

В этом примере мы создаем растровый индекс по полю category коллекции my_collection. Метод add_index() используется для указания имени поля, типа индекса и имени индекса.

После создания растрового индекса можно использовать параметр filter в операциях запроса для выполнения скалярной фильтрации на основе проиндексированного поля. Это позволяет эффективно сузить результаты поиска с помощью растрового индекса. Дополнительные сведения см. в разделе Фильтрация метаданных.

Ограничения

  • Растровые индексы поддерживаются только для скалярных полей, которые не являются первичными ключами.

  • Тип данных поля должен быть одним из следующих.

    • BOOL, INT8, INT16, INT32, INT64, VARCHAR.

    • ARRAY (элементы должны быть одного из следующих типов: BOOL, INT8, INT16, INT32, INT64, VARCHAR)

  • Растровые индексы не поддерживают следующие типы данных.

    • FLOAT, DOUBLE: Типы с плавающей точкой не совместимы с двоичной природой растровых индексов.

    • JSON: Типы данных JSON имеют сложную структуру, которая не может быть эффективно представлена с помощью растровых индексов.

  • Растровые индексы не подходят для полей с высокой кардинальностью (т. е. для полей с большим количеством различных значений).

    • Как правило, растровые индексы наиболее эффективны, когда кардинальность поля не превышает 500.

    • При увеличении кардинальности сверх этого порога преимущества растровых индексов в плане производительности снижаются, а накладные расходы на хранение становятся значительными.

    • Для полей с высокой кардинальностью следует рассмотреть возможность использования альтернативных методов индексирования, например инвертированных индексов, в зависимости от конкретного случая использования и требований к запросам.

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

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

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

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