Создайте векторный индекс в вашем кластере OpenSearch и определите сопоставление, которое содержит векторные поля, включая размерность вектора, алгоритм индексирования и методы измерения схожести. Затем сохраните векторы (обычно вместе с исходными данными или метаданными) в этот индекс.
Войдите в OpenSearch Dashboards и перейдите на страницу выполнения команд. Кластеры OpenSearch поддерживают несколько методов доступа. В этом разделе в качестве примера используется OpenSearch Dashboards для описания процедур эксплуатации.
Левая часть консоли — это поле ввода команды, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
Выполните следующую команду в OpenSearch Dashboards, чтобы создать векторный индекс.
Например, создать индекс с именем my_index. Этот индекс содержит векторное поле с именем my_vector и текстовое поле с именем my_label. Создаётся графовый индекс для векторного поля, и для измерения сходства используется евклидово расстояние.
PUT my_index{"settings": {"index": {"vector": true,"number_of_shards": 1,"number_of_replicas": 1}},"mappings": {"properties": {"my_vector": {"type": "vector","dimension": 2,"indexing": true,"algorithm": "GRAPH","metric": "euclidean"},"my_label": {"type": "keyword"}}}}
Параметр | Обязательно | Тип | Описание |
|---|---|---|---|
index.vector | Да | Булево | Включать ли векторные индексы. Установите этот параметр в true. В противном случае векторные индексы не могут быть созданы. |
index.number_of_shards | Нет | Целое | Количество шардов индекса. Это значение должно делиться на количество узлов кластера. Диапазон значений: 1–1024 Значение по умолчанию: 1 |
index.number_of_replicas | Нет | Целое | Количество реплик индекса. Реплики повышают доступность данных. Диапазон значений: 0 до количества узлов минус 1 Значение по умолчанию: 1 |
index.vector.exact_search_threshold | Нет | Целое | Порог для автоматического переключения от предварительной фильтрации к полному перебору. Когда размер промежуточного набора результатов в сегменте ниже этого порога, выполняется полный перебор. Диапазон значений: null (отключает автоматическое переключение от предварительной фильтрации к полному перебору) или положительное целое число Значение по умолчанию: null (отключает автоматическое переключение от предварительной фильтрации к полному перебору) |
Параметр | Обязательно | Тип | Описание |
|---|---|---|---|
тип | Да | Строка | Тип данных поля. Установите этот параметр в вектор для указания векторных полей. |
измерение | Да | Целое | Количество измерений вектора. Диапазон значений: 1–4096 |
индексирование | Нет | Булево | Включать ли ускорение векторного индекса. Диапазон значений:
|
lazy_indexing | Нет | Булево | Определяет, включить ли ленивую индексацию, при которой векторные индексы не создаются сразу при поступлении данных. Цель — ускорить операции записи. Ленивая индексация вступает в силу только когда индексация установлена в true и версия кластера OpenSearch 2.19.0. Диапазон значений:
|
алгоритм | Нет | Строка | Алгоритм векторного индексации. Этот параметр действителен только когда индексирование установлен в true. Когда этот параметр установлен в IVF_GRAPH или IVF_GRAPH_PQ, (Optional) Предварительное построение и регистрация векторных центроидов требуется. Диапазон значений:
|
dim_type | Нет | String | Векторный тип данных. Диапазон значений:
|
метрика | Нет | String | Метрика расстояния векторов, измеряющая схожесть или расстояние между векторами. Диапазон значений:
|
Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
соседи | Нет | Целое | Количество соседей каждого вектора в графовом индексе. Большое значение приводит к более высокой точности запросов, но замедляет построение индекса и выполнение запросов. Этот параметр доступен только когда индексация установлен в true, и алгоритм это GRAPH, GRAPH_PQ, GRAPH_SQ8 или GRAPH_SQ4. Диапазон значений: 20–255 Значение по умолчанию: 64 |
уменьшить | Нет | Float | Насколько агрессивно граф HNSW удаляет избыточные ребра во время построения. Этот параметр влияет на структуру графа HNSW. Значение по умолчанию: 1.0f Этот параметр доступен только когда индексирование установлен в true, и алгоритм это GRAPH, GRAPH_PQ, GRAPH_SQ8 или GRAPH_SQ4. Диапазон значений: 0.1–10 Значение по умолчанию: 1 |
масштабирование | Нет | Целое | Коэффициент масштабирования количества узлов верхнего уровня графа в HNSW графе. Эта настройка влияет на слои HNSW графа. Этот параметр доступен только при индексирование установлен в true, и алгоритм равен GRAPH, GRAPH_PQ, GRAPH_SQ8, или GRAPH_SQ4. Диапазон значений: 0–128 Значение по умолчанию: 50 |
efc | Нет | Целое | Сколько ближайших соседей исследовать при вставке нового вектора в HNSW граф. Большое значение приводит к более высокой точности, но более медленному построению индекса. Этот параметр доступен только при индексирование установлен в true, и алгоритм это GRAPH, GRAPH_PQ, GRAPH_SQ8 или GRAPH_SQ4. Диапазон значений: 0–100000 Значение по умолчанию: 200 |
max_scan_num | Нет | Целое | Максимальное количество узлов, которое будет сканировано во время поиска или построения индекса. Большое значение приводит к более высокой точности запросов, но к более медленному индексированию. Этот параметр доступен только когда индексация установлен в true, и алгоритм это GRAPH, GRAPH_PQ, GRAPH_SQ8 или GRAPH_SQ4. Диапазон значений: 0 до 1000000 Значение по умолчанию: 10000 |
Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
centroid_num | Нет | Целое | Количество центроидов, используемых на этапе грубой квантизации алгоритма. Это влияет на гранулярность квантизации и объём хранения. Этот параметр доступен только когда индексация установлена в true, и алгоритм это GRAPH_PQ. Диапазон значений: 0–65535 Значение по умолчанию: 255 |
fragment_num | Нет | Целое | Количество фрагментов, на которое делится каждый вектор. Это влияет на гранулярность PQ‑квантования. Значение по умолчанию 0. Плагин автоматически устанавливает количество фрагментов на основе длины вектора. Этот параметр доступен только когда индексация установлен в true, и алгоритм равен GRAPH_PQ. Диапазон значений: 0–4096 Значение по умолчанию: 0. Плагин автоматически устанавливает количество фрагментов на основе длины вектора. |
Когда алгоритм IVF_GRAPH или IVF_GRAPH_PQ используется для векторного индексирования, необходимо предварительно построить и зарегистрировать центроидные векторы.
IVF_GRAPH и IVF_GRAPH_PQ помогают ускорить индексирование и запросы в ультра‑масштабных кластерах. Эти два алгоритма позволяют сузить область запроса, разделив векторное пространство на подпространства с помощью кластеризации или случайной выборки. Перед предварительным построением необходимо получить все центроидные векторы с помощью кластеризации или случайной выборки. Центроидные векторы предварительно создаются в индексе GRAPH или GRAPH_PQ и затем регистрируются в кластере Elasticsearch. Все узлы в кластере могут использовать этот индекс. Повторное использование индекса центроидов между шардами может эффективно снизить нагрузку на обучение и количество запросов к индексу центроидов, улучшая производительность записи и запросов.
Например, выполните следующую команду в OpenSearch Dashboards, чтобы создать центрoидный индекс с именем my_dict:
PUT my_dict{"settings": {"index": {"vector": true},"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"properties": {"my_vector": {"type": "vector","dimension": 2,"indexing": true,"algorithm": "GRAPH","metric": "euclidean"}}}}
Для подробной настройки параметров см. Создание векторного индекса. Обратите внимание на следующие обязательные параметры:
Выполните следующую команду в OpenSearch Dashboards, чтобы зарегистрировать центрированный индекс как объект Dict с глобально уникальным именем (dict_name):
PUT _vector/register/my_dict{"dict_name": "my_dict"}
При создании векторного индекса вам не нужно указывать измерение или метрика. Скорее, вы указываете зарегистрированный объект Dict. Таблица 5 описывает ключевые параметры для указания объекта Dict. Для получения подробностей о других параметрах смотрите Создание векторного индекса.
Например, выполните следующую команду для создания IVF_GRAPH векторного индекса:
PUT my_index{"settings": {"index": {"vector": true,"sort.field": "my_vector.centroid" # Set the centroid subfield of each vector field as a ranking field.}},"mappings": {"properties": {"my_vector": {"type": "vector","indexing": true,"algorithm": "IVF_GRAPH","dict_name": "my_dict","offload_ivf": true}}}}
Параметр | Обязательно | Тип | Описание |
|---|---|---|---|
dict_name | Да | Строка | Имя индекса центроидов. Например, my_dict. Размерности векторов и метрики индекса должны быть одинаковыми с теми, что у индекса Dict. |
offload_ivf | Да | Булево | Нужно ли выгружать IVF инвертированный индекс в Elasticsearch. Значение: true или false.
|