@wiscale/velesdb-sdk 1.3.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +157 -3
- package/dist/index.d.mts +386 -11
- package/dist/index.d.ts +386 -11
- package/dist/index.js +899 -60
- package/dist/index.mjs +895 -59
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ await db.init();
|
|
|
62
62
|
|
|
63
63
|
// Same API as WASM backend
|
|
64
64
|
await db.createCollection('products', { dimension: 1536 });
|
|
65
|
-
await db.insert('products', { id:
|
|
65
|
+
await db.insert('products', { id: 1, vector: [...] });
|
|
66
66
|
const results = await db.search('products', query, { k: 10 });
|
|
67
67
|
```
|
|
68
68
|
|
|
@@ -120,6 +120,10 @@ await db.insert('docs', {
|
|
|
120
120
|
vector: [0.1, 0.2, ...], // or Float32Array
|
|
121
121
|
payload: { key: 'value' } // optional metadata
|
|
122
122
|
});
|
|
123
|
+
|
|
124
|
+
// REST backend note:
|
|
125
|
+
// IDs must be numeric and within JS safe integer range (0..Number.MAX_SAFE_INTEGER).
|
|
126
|
+
// Non-numeric strings are rejected.
|
|
123
127
|
```
|
|
124
128
|
|
|
125
129
|
### `db.insertBatch(collection, documents)`
|
|
@@ -165,27 +169,36 @@ const results = await db.hybridSearch(
|
|
|
165
169
|
);
|
|
166
170
|
```
|
|
167
171
|
|
|
168
|
-
### `db.query(queryString, params)` (v0.8.5+)
|
|
172
|
+
### `db.query(collection, queryString, params?, options?)` (v0.8.5+)
|
|
169
173
|
|
|
170
174
|
Execute a VelesQL query.
|
|
171
175
|
|
|
172
176
|
```typescript
|
|
173
177
|
// Simple query
|
|
174
178
|
const results = await db.query(
|
|
179
|
+
'documents',
|
|
175
180
|
"SELECT * FROM documents WHERE category = 'tech' LIMIT 10"
|
|
176
181
|
);
|
|
177
182
|
|
|
178
183
|
// With vector parameter
|
|
179
184
|
const results = await db.query(
|
|
185
|
+
'documents',
|
|
180
186
|
"SELECT * FROM documents WHERE VECTOR NEAR $query LIMIT 5",
|
|
181
187
|
{ query: [0.1, 0.2, ...] }
|
|
182
188
|
);
|
|
183
189
|
|
|
184
190
|
// Hybrid query
|
|
185
191
|
const results = await db.query(
|
|
192
|
+
'docs',
|
|
186
193
|
"SELECT * FROM docs WHERE VECTOR NEAR $v AND content MATCH 'rust' LIMIT 10",
|
|
187
194
|
{ v: queryVector }
|
|
188
195
|
);
|
|
196
|
+
|
|
197
|
+
// Aggregation query (returns { result, stats })
|
|
198
|
+
const agg = await db.query(
|
|
199
|
+
'documents',
|
|
200
|
+
"SELECT COUNT(*) AS total FROM documents"
|
|
201
|
+
);
|
|
189
202
|
```
|
|
190
203
|
|
|
191
204
|
### `db.multiQuerySearch(collection, vectors, options)` (v1.1.0+) ⭐ NEW
|
|
@@ -221,7 +234,7 @@ const results = await db.multiQuerySearch('docs', vectors, {
|
|
|
221
234
|
});
|
|
222
235
|
```
|
|
223
236
|
|
|
224
|
-
> **Note:**
|
|
237
|
+
> **Note:** WASM supports `rrf`, `average`, `maximum`. `weighted` is REST-only.
|
|
225
238
|
|
|
226
239
|
### `db.isEmpty(collection)` (v0.8.11+)
|
|
227
240
|
|
|
@@ -246,6 +259,147 @@ await db.flush('documents');
|
|
|
246
259
|
|
|
247
260
|
Close the client and release resources.
|
|
248
261
|
|
|
262
|
+
## Knowledge Graph API (v1.2.0+)
|
|
263
|
+
|
|
264
|
+
VelesDB supports hybrid vector + graph queries.
|
|
265
|
+
|
|
266
|
+
### `db.addEdge(collection, edge)`
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
await db.addEdge('social', {
|
|
270
|
+
id: 1, source: 100, target: 200,
|
|
271
|
+
label: 'FOLLOWS',
|
|
272
|
+
properties: { since: '2024-01-01' }
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### `db.getEdges(collection, options?)`
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
const edges = await db.getEdges('social', { label: 'FOLLOWS' });
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### `db.traverseGraph(collection, request)`
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
const result = await db.traverseGraph('social', {
|
|
286
|
+
source: 100, strategy: 'bfs', maxDepth: 3
|
|
287
|
+
});
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### `db.getNodeDegree(collection, nodeId)`
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
const degree = await db.getNodeDegree('social', 100);
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## VelesQL v2.0 Queries (v1.4.0+)
|
|
297
|
+
|
|
298
|
+
Execute advanced SQL-like queries with aggregation, joins, and set operations.
|
|
299
|
+
|
|
300
|
+
### Aggregation with GROUP BY / HAVING
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
// Group by with aggregates
|
|
304
|
+
const result = await db.query('products', `
|
|
305
|
+
SELECT category, COUNT(*), AVG(price)
|
|
306
|
+
FROM products
|
|
307
|
+
GROUP BY category
|
|
308
|
+
HAVING COUNT(*) > 5 AND AVG(price) > 50
|
|
309
|
+
`);
|
|
310
|
+
|
|
311
|
+
// Access results
|
|
312
|
+
for (const row of result.results) {
|
|
313
|
+
console.log(row.payload.category, row.payload.count);
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### ORDER BY with similarity()
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// Order by semantic similarity
|
|
321
|
+
const result = await db.query('docs', `
|
|
322
|
+
SELECT * FROM docs
|
|
323
|
+
ORDER BY similarity(vector, $v) DESC
|
|
324
|
+
LIMIT 10
|
|
325
|
+
`, { v: queryVector });
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### JOIN across collections
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
// Cross-collection join
|
|
332
|
+
const result = await db.query('orders', `
|
|
333
|
+
SELECT * FROM orders
|
|
334
|
+
JOIN customers AS c ON orders.customer_id = c.id
|
|
335
|
+
WHERE status = $status
|
|
336
|
+
`, { status: 'active' });
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Set Operations (UNION / INTERSECT / EXCEPT)
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
// Combine query results
|
|
343
|
+
const result = await db.query('users', `
|
|
344
|
+
SELECT * FROM active_users
|
|
345
|
+
UNION
|
|
346
|
+
SELECT * FROM archived_users
|
|
347
|
+
`);
|
|
348
|
+
|
|
349
|
+
// Find common elements
|
|
350
|
+
const result = await db.query('users', `
|
|
351
|
+
SELECT id FROM premium_users
|
|
352
|
+
INTERSECT
|
|
353
|
+
SELECT id FROM active_users
|
|
354
|
+
`);
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Hybrid Search with USING FUSION
|
|
358
|
+
|
|
359
|
+
```typescript
|
|
360
|
+
// RRF fusion (default)
|
|
361
|
+
const result = await db.query('docs', `
|
|
362
|
+
SELECT * FROM docs
|
|
363
|
+
USING FUSION(strategy = 'rrf', k = 60)
|
|
364
|
+
LIMIT 20
|
|
365
|
+
`);
|
|
366
|
+
|
|
367
|
+
// Weighted fusion
|
|
368
|
+
const result = await db.query('docs', `
|
|
369
|
+
SELECT * FROM docs
|
|
370
|
+
USING FUSION(strategy = 'weighted', vector_weight = 0.7, graph_weight = 0.3)
|
|
371
|
+
LIMIT 20
|
|
372
|
+
`);
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## VelesQL Query Builder (v1.2.0+)
|
|
376
|
+
|
|
377
|
+
Build type-safe VelesQL queries with the fluent builder API.
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
import { velesql } from '@wiscale/velesdb-sdk';
|
|
381
|
+
|
|
382
|
+
// Graph pattern query
|
|
383
|
+
const builder = velesql()
|
|
384
|
+
.match('d', 'Document')
|
|
385
|
+
.nearVector('$queryVector', queryVector)
|
|
386
|
+
.andWhere('d.category = $cat', { cat: 'tech' })
|
|
387
|
+
.limit(10);
|
|
388
|
+
|
|
389
|
+
const queryString = builder.toVelesQL();
|
|
390
|
+
const params = builder.getParams();
|
|
391
|
+
const results = await db.query('documents', queryString, params);
|
|
392
|
+
|
|
393
|
+
// Graph traversal with relationships
|
|
394
|
+
const graphQuery = velesql()
|
|
395
|
+
.match('p', 'Person')
|
|
396
|
+
.rel('KNOWS')
|
|
397
|
+
.to('f', 'Person')
|
|
398
|
+
.where('p.age > 25')
|
|
399
|
+
.return(['p.name', 'f.name'])
|
|
400
|
+
.toVelesQL();
|
|
401
|
+
```
|
|
402
|
+
|
|
249
403
|
## Error Handling
|
|
250
404
|
|
|
251
405
|
```typescript
|