Skip to content

Commit e7b1058

Browse files
committed
Updated docs and tests for TypeORM 0.3.27
1 parent 203a8e7 commit e7b1058

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

README.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -537,11 +537,7 @@ See a [full example](tests/slonik.test.mjs)
537537

538538
## TypeORM
539539

540-
Import the library
541-
542-
```javascript
543-
import pgvector from 'pgvector';
544-
```
540+
TypeORM 0.3.27+ has [built-in support](https://typeorm.io/docs/entity/entities#vector-columns) for pgvector :tada:
545541

546542
Enable the extension
547543

@@ -563,21 +559,23 @@ class Item {
563559
@PrimaryGeneratedColumn()
564560
id: number
565561

566-
@Column()
567-
embedding: string
562+
@Column('vector', {length: 3})
563+
embedding: number[]
568564
}
569565
```
570566

571567
Insert a vector
572568

573569
```javascript
574570
const itemRepository = AppDataSource.getRepository(Item);
575-
await itemRepository.save({embedding: pgvector.toSql([1, 2, 3])});
571+
await itemRepository.save({embedding: [1, 2, 3]});
576572
```
577573

578574
Get the nearest neighbors to a vector
579575

580576
```javascript
577+
import pgvector from 'pgvector';
578+
581579
const items = await itemRepository
582580
.createQueryBuilder('item')
583581
.orderBy('embedding <-> :embedding')

tests/typeorm.test.mjs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ test('typeorm example', async () => {
1616
primary: true,
1717
generated: true
1818
},
19-
// custom types not supported
20-
// https://github.com/typeorm/typeorm/issues/10056
2119
embedding: {
22-
type: String
20+
type: 'vector',
21+
length: 3
2322
},
2423
half_embedding: {
25-
type: String
24+
type: 'halfvec',
25+
length: 3
2626
},
27+
// custom types not supported
28+
// https://github.com/typeorm/typeorm/issues/10056
2729
binary_embedding: {
2830
type: String
2931
},
@@ -46,9 +48,9 @@ test('typeorm example', async () => {
4648
await AppDataSource.query('CREATE TABLE typeorm_items (id bigserial PRIMARY KEY, embedding vector(3), half_embedding halfvec(3), binary_embedding bit(3), sparse_embedding sparsevec(3))');
4749

4850
const itemRepository = AppDataSource.getRepository(Item);
49-
await itemRepository.save({embedding: pgvector.toSql([1, 1, 1]), half_embedding: pgvector.toSql([1, 1, 1]), binary_embedding: '000', sparse_embedding: new SparseVector([1, 1, 1])});
50-
await itemRepository.save({embedding: pgvector.toSql([2, 2, 2]), half_embedding: pgvector.toSql([2, 2, 2]), binary_embedding: '101', sparse_embedding: new SparseVector([2, 2, 2])});
51-
await itemRepository.save({embedding: pgvector.toSql([1, 1, 2]), half_embedding: pgvector.toSql([1, 1, 2]), binary_embedding: '111', sparse_embedding: new SparseVector([1, 1, 2])});
51+
await itemRepository.save({embedding: [1, 1, 1], half_embedding: [1, 1, 1], binary_embedding: '000', sparse_embedding: new SparseVector([1, 1, 1])});
52+
await itemRepository.save({embedding: [2, 2, 2], half_embedding: [2, 2, 2], binary_embedding: '101', sparse_embedding: new SparseVector([2, 2, 2])});
53+
await itemRepository.save({embedding: [1, 1, 2], half_embedding: [1, 1, 2], binary_embedding: '111', sparse_embedding: new SparseVector([1, 1, 2])});
5254

5355
const items = await itemRepository
5456
.createQueryBuilder('item')
@@ -57,8 +59,8 @@ test('typeorm example', async () => {
5759
.limit(5)
5860
.getMany();
5961
assert.deepEqual(items.map(v => v.id), [1, 3, 2]);
60-
assert.deepEqual(pgvector.fromSql(items[0].embedding), [1, 1, 1]);
61-
assert.deepEqual(pgvector.fromSql(items[0].half_embedding), [1, 1, 1]);
62+
assert.deepEqual(items[0].embedding, [1, 1, 1]);
63+
assert.deepEqual(items[0].half_embedding, [1, 1, 1]);
6264
assert.equal(items[0].binary_embedding, '000');
6365
assert.deepEqual((new SparseVector(items[0].sparse_embedding).toArray()), [1, 1, 1]);
6466

0 commit comments

Comments
 (0)