+
50
-

php怎么实现向量数据库插入查询相似度等代码?

php

php怎么实现向量数据库插入查询相似度等代码?

推荐一款向量数据库。

网友回复

+
0
-

可以使用PostgreSQL和php来使用。

PostgreSQL可以使用专门的扩展,如Pgvector来处理向量数据的插入和近似查询。

确保PostgreSQL扩展已安装:首先需要确保PostgreSQL的服务器上安装了适当的扩展,如Pgvector扩展。

Pgvector安装 :参考https://github.com/pgvector/pgvector

cd /tmp
git clone --branch v0.6.2 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # may need sudo

或者直接docker

docker pull pgvector/pgvector:pg16 
docker run --name pgvector --restart=always -e POSTGRES_USER=pgvector -e POSTGRES_PASSWORD=pgvector -v $(pwd)/data:/var/lib/postgresql/data -p 54333:5432 -d pgvector/pgvector:pg16

命令行输入

psql -U postgres

创建数据库

create database pgvectordb;

切换数据库

\c pgvectordb;

创建vector扩展。

CREATE EXTENSION IF NOT EXISTS vector;

创建数据库表:设计一张表,用以存储向量数据及其它信息。

CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));

插入向量:将数据插入向量字段中。

INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

向量搜索:使用向量字段执行相似性搜索。

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

800_auto

php操作

pgsql支持很多不同编程语言的连接,

800_auto

800_auto

每个语言的链接地址和示例代码都在这:https://github.com/pgvector/pgvector

php需要使用这个库来连接pgsql,

https://github.com/pgvector/pgvector-php

composer安装

composer require pgvector/pgvector

php连接pgsql插入向量数据和近似查询示例代码:

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use Pgvector\Vector;

$db = pg_connect('postgres://localhost/pgvectordb');

pg_query($db, 'CREATE EXTENSION IF NOT EXISTS vector');
pg_query($db, 'DROP TABLE IF EXISTS items');
pg_query($db, 'CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))');

$embedding1 = new Vector([1, 1, 1]);
$embedding2 = new Vector([2, 2, 2]);
$embedding3 = new Vector([1, 1, 2]);
pg_query_params($db, 'INSERT INTO items (embedding) VALUES ($1), ($2), ($3)', [$embedding1, $embedding2, $embedding3]);

$embedding = new Vector([1, 1, 1]);
$result = pg_query_params($db, 'SELECT * FROM items ORDER BY embedding <-> $1 LIMIT 5', [$embedding]);
while ($row = pg_fetch_array($result)) {
    echo $row['id'] . ': ' . new Vector($row['embedding']) . "\n";
}
pg_free_result($result);

pg_query($db, 'CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)');

pg_close($db);
我知道答案,我要回答