@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 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: 'p1', vector: [...] });
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:** Multi-query fusion is only available with the REST backend.
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