pgvector / pgvector
PHP 对 pgvector 的支持
v0.2.0
2024-06-26 06:17 UTC
Requires
- php: >= 8.1
Requires (Dev)
- illuminate/database: >= 10
- phpunit/phpunit: ^10
This package is not auto-updated.
Last update: 2024-09-18 07:33:00 UTC
README
pgvector 对 PHP 的支持
入门指南
遵循您数据库库的说明
或者查看一些示例
Laravel
安装包
composer require pgvector/pgvector
启用扩展
php artisan vendor:publish --tag="pgvector-migrations"
php artisan migrate
您现在可以在未来的迁移中使用 vector
类型
Schema::create('items', function (Blueprint $table) { $table->vector('embedding', 3); });
更新您的模型
use Pgvector\Laravel\Vector; class Item extends Model { use HasNeighbors; protected $casts = ['embedding' => Vector::class]; }
插入一个向量
$item = new Item(); $item->embedding = [1, 2, 3]; $item->save();
获取与记录最近的邻居
use Pgvector\Laravel\Distance; $neighbors = $item->nearestNeighbors('embedding', Distance::L2)->take(5)->get();
也支持 InnerProduct
、Cosine
、L1
、Hamming
和 Jaccard
距离
获取与向量最近的邻居
$neighbors = Item::query()->nearestNeighbors('embedding', [1, 2, 3], Distance::L2)->take(5)->get();
获取距离
$neighbors->pluck('neighbor_distance');
在迁移中添加近似索引
public function up() { DB::statement('CREATE INDEX my_index ON items USING hnsw (embedding vector_l2_ops)'); // or DB::statement('CREATE INDEX my_index ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)'); } public function down() { DB::statement('DROP INDEX my_index'); }
使用 vector_ip_ops
进行内积,使用 vector_cosine_ops
进行余弦距离
PHP
启用扩展
pg_query($db, 'CREATE EXTENSION IF NOT EXISTS vector');
创建表
pg_query($db, 'CREATE TABLE items (embedding vector(3))');
插入一个向量
use Pgvector\Vector; $embedding = new Vector([1, 2, 3]); pg_query_params($db, 'INSERT INTO items (embedding) VALUES ($1)', [$embedding]);
获取与向量最近的邻居
$embedding = new Vector([1, 2, 3]); $result = pg_query_params($db, 'SELECT * FROM items ORDER BY embedding <-> $1 LIMIT 5', [$embedding]);
添加近似索引
pg_query($db, 'CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)'); // or pg_query($db, 'CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)');
查看 完整示例
升级
0.1.4
包名从 ankane/pgvector
更改为 pgvector/pgvector
。在 composer.json
中更新它以移除消息。
历史
查看 变更日志
贡献
鼓励每个人帮助改进这个项目。以下是一些您可以提供帮助的方法
开始开发
git clone https://github.com/pgvector/pgvector-php.git cd pgvector-php composer install createdb pgvector_php_test composer test
运行示例
cd examples/loading
composer install
createdb pgvector_example
php example.php