diff --git a/README.md b/README.md index 512c86e..73a0ed3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ And follow the instructions for your database library: - [Slonik](#slonik) - [TypeORM](#typeorm) - [MikroORM](#mikroorm) -- [Drizzle ORM](#drizzle-orm) (experimental) +- [Drizzle ORM](#drizzle-orm) Or check out some examples: @@ -617,7 +617,7 @@ See a [full example](tests/mikro-orm/index.test.mjs) ## Drizzle ORM -Note: This is currently experimental and does not work with Drizzle Kit +Drizzle ORM 0.31.0+ has built-in support for pgvector :tada: Enable the extension @@ -628,7 +628,7 @@ await client`CREATE EXTENSION IF NOT EXISTS vector`; Add a vector field ```javascript -import { vector } from 'pgvector/drizzle-orm'; +import { vector } from 'drizzle-orm/pg-core'; const items = pgTable('items', { id: serial('id').primaryKey(), @@ -636,6 +636,8 @@ const items = pgTable('items', { }); ``` +Also supports `halfvec`, `bit`, and `sparsevec` + Insert vectors ```javascript @@ -649,7 +651,7 @@ await db.insert(items).values(newItems); Get the nearest neighbors to a vector ```javascript -import { l2Distance } from 'pgvector/drizzle-orm'; +import { l2Distance } from 'drizzle-orm'; const allItems = await db.select() .from(items) @@ -657,7 +659,7 @@ const allItems = await db.select() .limit(5); ``` -Also supports `maxInnerProduct` and `cosineDistance` +Also supports `innerProduct`, `cosineDistance`, `l1Distance`, `hammingDistance`, and `jaccardDistance` See a [full example](tests/drizzle-orm/index.test.mjs) diff --git a/tests/drizzle-orm/index.test.mjs b/tests/drizzle-orm/index.test.mjs index 2d9b0b5..62992e8 100644 --- a/tests/drizzle-orm/index.test.mjs +++ b/tests/drizzle-orm/index.test.mjs @@ -1,8 +1,8 @@ -import { sql } from 'drizzle-orm'; +import { sql, l2Distance, innerProduct, cosineDistance, l1Distance, hammingDistance, jaccardDistance } from 'drizzle-orm'; import { drizzle } from 'drizzle-orm/postgres-js'; -import { pgTable, serial } from 'drizzle-orm/pg-core'; +import { pgTable, serial, vector, halfvec, bit, sparsevec } from 'drizzle-orm/pg-core'; +import { SparseVector } from 'pgvector'; import postgres from 'postgres'; -import { cosineDistance, l2Distance, maxInnerProduct, l1Distance, hammingDistance, jaccardDistance, vector, halfvec, bit, sparsevec, SparseVector } from 'pgvector/drizzle-orm'; test('example', async () => { const client = postgres({database: 'pgvector_node_test', onnotice: function() {}}); @@ -55,7 +55,7 @@ test('example', async () => { // max inner product allItems = await db.select() .from(items) - .orderBy(maxInnerProduct(items.embedding, [1, 1, 1])) + .orderBy(innerProduct(items.embedding, [1, 1, 1])) .limit(5); expect(allItems.map(v => v.id)).toStrictEqual([2, 3, 1, 4]);