Построение векторного индекса
В этом руководстве описано, как построить векторный индекс в 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()