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

В этом руководстве описано, как построить векторный индекс в Milvus.

Векторный индекс - это единица организации метаданных, используемая для ускорения поиска похожих векторов. Если не создавать индекс на векторах, Milvus будет выполнять жесткий поиск.

По умолчанию Milvus не индексирует сегменты с менее чем 1,024 строками.

В следующем примере показано, как построить индекс типа IVF_FLAT с 1024 кластерами, используя евклидово расстояние (L2). Вы можете выбрать индекс и тип метрики, которые подходят для вашего сценария.

Подготовка параметров индекса

Следуйте этим шагам, чтобы подготовить параметры индекса:

index_params = {
  "metric_type": "L2",
  "index_type": "IVF_FLAT",
  "params": {"nlist": 1024}
}
Параметр Описание Варианты
metric_type Тип метрики, используемой для измерения сходства векторов. Для вещественных векторов: - L2 (евклидово расстояние)- IP (скалярное произведение)- COSINE (косинусное сходство)Для бинарных векторов: - JACCARD (расстояние Жаккара)- HAMMING (расстояние Хэмминга)
index_type Тип индекса, используемый для ускорения поиска векторов. Для вещественных векторов: - FLAT (FLAT)- IVF_FLAT (IVF_FLAT)- IVF_SQ8 (IVF_SQ8)- IVF_PQ (IVF_PQ)- GPU_IVF_FLAT* (GPU_IVF_FLAT)- GPU_IVF_PQ*> (GPU_IVF_PQ)- HNSW (HNSW)- DISKANN* (DISKANN)Для бинарных векторов: - BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params Конкретные параметры конструирования индекса. Дополнительные сведения см. в разделах Индексация в памяти и на диске.
  • DISKANN имеет определенные предварительные требования. Дополнительные сведения см. в разделе Индексация на диске.
  • GPU_IVF_FLAT и GPU_IVF_PQ доступны только в установках Milvus с включенной поддержкой GPU.

Построение индекса

Постройте индекс, указав имя векторного поля и параметры индекса.

from pymilvus import Collection, utility
collection = Collection("книги")
collection.create_index(
  field_name="intro_text",
  index_params=index_params
)

utility.index_building_progress("книги")

Параметр Описание
field_name Название векторного поля, на котором строится индекс.
index_params Параметры индекса для построения.

Построение скалярного индекса

В отличие от векторов, у скаляров есть только величина, но нет направления. Milvus рассматривает отдельные числа и строки как скаляры. Ниже приведен список доступных типов данных для скалярных полей в Milvus.

Начиная с версии Milvus v2.1.0, для ускорения фильтрации атрибутов в гибридных поисках можно создавать индекс на скалярных полях. Более подробно о создании индекса на скалярном поле можно прочитать здесь.

Примечание: ссылку "здесь" следует заменить фактической ссылкой, указанной в исходном документе.

Построение индекса

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

В следующем фрагменте кода предполагается, что уже существует коллекция с названием книги, и что на строковом поле название_книги нужно создать индекс.

from pymilvus import Collection

collection = Collection("книги")   
collection.create_index(
  field_name="название_книги", 
  index_name="скалярный_индекс",
)
collection.load()

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

search_param = {
  "data": [[0.1, 0.2]],
  "anns_field": "intro_text",
  "param": {"metric_type": "L2", "params": {"nprobe": 10}},
  "limit": 2,
  "expr": "название_книги like \"Привет%\"", 
}
res = collection.search(**search_param)

Удаление индекса

from pymilvus import Collection
collection = Collection("книги")      # Получить существующую коллекцию.
collection.drop_index()