vector. Использование векторных типов данных
Версия: 0.7.4
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: Отсутствуют.
Схема размещения:
ext
.
vector
– это расширение с открытым исходным кодом для реализации векторных типов хранения данных и поиска по сходству векторов для СУБД на основе PostgreSQL. Позволяет хранить векторы вместе с остальными данными в БД.
Поддерживает:
-
хранение векторов:
- с одинарной точностью;
- с половинной точностью;
- в двоичных и разреженных векторах;
-
точный и приблизительный поиск ближайших соседей для векторов по:
- расстоянию L2;
- внутреннему произведению;
- косинусному расстоянию;
- расстоянию L1;
- расстоянию Хэмминга (только для двоичных векторов);
- расстоянию Жаккарда (только для двоичных векторов);
Также поддерживается:
- соответствие ACID;
- восстановление на определенный момент времени;
- объединения и другие функции PostgreSQL.
vector
доступен для приложений на любом языке программирования с помощью клиента PostgreSQL.
Доработка
Добавление расширения vector
не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Расширение vector
доступно для продукта Pangolin, начиная с версии 6.4.0 и не требует дополнительных действий для сборки. Для того чтобы начать использовать расширение, необходимо один раз установить его в нужную БД командой:
CREATE EXTENSION vector;
Также возможно установить расширение в конкретную схему:
CREATE EXTENSION vector SCHEMA ext;
Для дальнейшего использования расширения, во избежание проблем, схема с расширением должна быть добавлена в пути поиска для УЗ, использующей векторы в своей работе:
SET search_path=public,ext;
Использование модуля
Быстрый старт
Создание таблицы с вектором в трех измерениях:
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
Вставка данных:
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
Поиск ближайшего соседа по расстоянию L2:
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
Также поддерживается:
- внутреннее произведение
<#>
; - косинусное расстояние
<=>
; - расстояние L1
<+>
.
Примечание:
<#>
возвращает отрицательное внутреннее произведение, поскольку PostgreSQL поддерживает только порядок ASC для сканирования индекса по оператору.
Хранение
Создани е новой таблицы с векторным полем:
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
Также возможно добавление векторного поля к существующей таблице:
ALTER TABLE items ADD COLUMN embedding vector(3);
Также поддерживаются другие векторные типы:
- с половинной точностью;
- двоичные векторы;
- разреженные векторы.
Вставка данных:
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
Возможна загрузка векторов пачкой с использованием команды COPY
:
COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);
Добавление векторов:
INSERT INTO items (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
Обновление векторов:
UPDATE items SET embedding = '[1,2,3]' WHERE id = 1;
Удаление векторов:
DELETE FROM items WHERE id = 1;