pgvecto.rs — это расширение Postgres, предоставляющее функции поиска по сходству векторов. Он написан на Rust и основан на pgrx.
Проверьте pgvecto.rs против pgvector для получения более подробной информации.
Особенность | pgvecto.rs | pgvector |
---|---|---|
Фильтрация | Представляет метод VBASE для векторного поиска и реляционных запросов (например, одновекторный TopK + фильтр + объединение). | При применении фильтров результаты могут быть неполными. Например, если вы изначально намеревались ограничить количество результатов до 10, с помощью фильтров вы можете получить только 5 результатов. |
Векторные размеры | Поддерживает до 65535 размеров. | Поддерживает до 2000 измерений. |
SIMD | Инструкции SIMD динамически передаются во время выполнения, чтобы максимизировать производительность в зависимости от возможностей конкретной машины. | Добавлена диспетчеризация ЦП для дистанционных функций в Linux x86-64" в версии 0.7.0. |
Типы данных | Вводятся дополнительные типы данных: двоичные векторы, FP16 (16-битное число с плавающей запятой) и INT8 (8-битное целое число). | - |
Индексирование | Управляет хранением и памятью индексов отдельно от PostgreSQL. | Опирается на собственный механизм хранения PostgreSQL. |
Поддержка WAL | Обеспечивает поддержку ведения журнала упреждающей записи (WAL) для данных, поддержка индексов находится в стадии разработки. | Обеспечивает поддержку ведения журнала упреждающей записи (WAL) для индексов и данных. |
Новым пользователям мы рекомендуем использовать образ Docker, чтобы быстро начать работу.
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
Затем вы можете подключиться к базе данных с помощью инструмента командной строки psql
. Имя пользователя по умолчанию — postgres
, а пароль по умолчанию — mysecretpassword
.
psql -h localhost -p 5432 -U postgres
Запустите следующий SQL-код, чтобы убедиться, что расширение включено.
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs представляет новый тип данных vector(n)
обозначающий n-мерный вектор. Число n
в скобках означает размерность вектора.
Вы можете создать таблицу со следующим SQL.
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
Кончик
vector(n)
является допустимым типом данных, только если vector(3)
vector
также являются допустимым типом данных. Однако вы все равно не можете поставить vector
для столбца или некоторые значения не совпадают с размером, обозначенным столбцом, вы не сможете создать для него индекс.
Затем вы можете заполнить таблицу векторными данными следующим образом.
-- insert values
INSERT INTO items (embedding)
VALUES ( ' [1,2,3] ' ), ( ' [4,5,6] ' );
-- or insert values using a casting from array to vector
INSERT INTO items (embedding)
VALUES (ARRAY[ 1 , 2 , 3 ]:: real []), (ARRAY[ 4 , 5 , 6 ]:: real []);
Мы поддерживаем три оператора для расчета расстояния между двумя векторами.
<->
: квадрат евклидова расстояния, определяемый как <#>
: отрицательное скалярное произведение, определяемое как <=>
: косинусное расстояние, определяемое как -- call the distance function through operators
-- squared Euclidean distance
SELECT ' [1, 2, 3] ' ::vector < - > ' [3, 2, 1] ' ::vector;
-- negative dot product
SELECT ' [1, 2, 3] ' ::vector < # > '[3, 2, 1]'::vector;
-- cosine distance
SELECT ' [1, 2, 3] ' ::vector <=> ' [3, 2, 1] ' ::vector;
Вы можете искать вектор просто так.
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
Пожалуйста, ознакомьтесь с руководством по применению вопросов-ответов.
Тип vecf16
аналогичен vector
во всех типах, кроме скалярного. Он хранит 16-битные числа с плавающей запятой. Если вы хотите уменьшить использование памяти для повышения производительности, вы можете попробовать заменить vector
тип на тип vecf16
.
Пожалуйста, ознакомьтесь с ДОРОЖНОЙ КАРТОЙ. Хотите прыгнуть? Приветствуются обсуждения и вклады!
good first issue ?
проблемы! Мы приветствуем любой вклад со стороны сообщества открытого исходного кода, частных лиц и партнеров.
Спасибо этим замечательным людям (ключ смайлика):
Добавьте свой вклад |
Этот проект соответствует спецификации всех участников. Любой вклад приветствуется!
Благодаря следующим проектам: