可以使用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;
php操作
pgsql支持很多不同编程语言的连接,
每个语言的链接地址和示例代码都在这: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);
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?