@wiscale/velesdb-sdk 1.2.0 → 1.4.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 +145 -1
- package/dist/index.d.mts +515 -11
- package/dist/index.d.ts +515 -11
- package/dist/index.js +800 -24
- package/dist/index.mjs +797 -23
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -165,24 +165,27 @@ const results = await db.hybridSearch(
|
|
|
165
165
|
);
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
### `db.query(queryString, params)` (v0.8.5+)
|
|
168
|
+
### `db.query(collection, queryString, params?, options?)` (v0.8.5+)
|
|
169
169
|
|
|
170
170
|
Execute a VelesQL query.
|
|
171
171
|
|
|
172
172
|
```typescript
|
|
173
173
|
// Simple query
|
|
174
174
|
const results = await db.query(
|
|
175
|
+
'documents',
|
|
175
176
|
"SELECT * FROM documents WHERE category = 'tech' LIMIT 10"
|
|
176
177
|
);
|
|
177
178
|
|
|
178
179
|
// With vector parameter
|
|
179
180
|
const results = await db.query(
|
|
181
|
+
'documents',
|
|
180
182
|
"SELECT * FROM documents WHERE VECTOR NEAR $query LIMIT 5",
|
|
181
183
|
{ query: [0.1, 0.2, ...] }
|
|
182
184
|
);
|
|
183
185
|
|
|
184
186
|
// Hybrid query
|
|
185
187
|
const results = await db.query(
|
|
188
|
+
'docs',
|
|
186
189
|
"SELECT * FROM docs WHERE VECTOR NEAR $v AND content MATCH 'rust' LIMIT 10",
|
|
187
190
|
{ v: queryVector }
|
|
188
191
|
);
|
|
@@ -246,6 +249,147 @@ await db.flush('documents');
|
|
|
246
249
|
|
|
247
250
|
Close the client and release resources.
|
|
248
251
|
|
|
252
|
+
## Knowledge Graph API (v1.2.0+)
|
|
253
|
+
|
|
254
|
+
VelesDB supports hybrid vector + graph queries.
|
|
255
|
+
|
|
256
|
+
### `db.addEdge(collection, edge)`
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
await db.addEdge('social', {
|
|
260
|
+
id: 1, source: 100, target: 200,
|
|
261
|
+
label: 'FOLLOWS',
|
|
262
|
+
properties: { since: '2024-01-01' }
|
|
263
|
+
});
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### `db.getEdges(collection, options?)`
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
const edges = await db.getEdges('social', { label: 'FOLLOWS' });
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### `db.traverseGraph(collection, request)`
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
const result = await db.traverseGraph('social', {
|
|
276
|
+
source: 100, strategy: 'bfs', maxDepth: 3
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### `db.getNodeDegree(collection, nodeId)`
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
const degree = await db.getNodeDegree('social', 100);
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## VelesQL v2.0 Queries (v1.4.0+)
|
|
287
|
+
|
|
288
|
+
Execute advanced SQL-like queries with aggregation, joins, and set operations.
|
|
289
|
+
|
|
290
|
+
### Aggregation with GROUP BY / HAVING
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
// Group by with aggregates
|
|
294
|
+
const result = await db.query('products', `
|
|
295
|
+
SELECT category, COUNT(*), AVG(price)
|
|
296
|
+
FROM products
|
|
297
|
+
GROUP BY category
|
|
298
|
+
HAVING COUNT(*) > 5 AND AVG(price) > 50
|
|
299
|
+
`);
|
|
300
|
+
|
|
301
|
+
// Access results
|
|
302
|
+
for (const row of result.results) {
|
|
303
|
+
console.log(row.payload.category, row.payload.count);
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### ORDER BY with similarity()
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
// Order by semantic similarity
|
|
311
|
+
const result = await db.query('docs', `
|
|
312
|
+
SELECT * FROM docs
|
|
313
|
+
ORDER BY similarity(vector, $v) DESC
|
|
314
|
+
LIMIT 10
|
|
315
|
+
`, { v: queryVector });
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### JOIN across collections
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
// Cross-collection join
|
|
322
|
+
const result = await db.query('orders', `
|
|
323
|
+
SELECT * FROM orders
|
|
324
|
+
JOIN customers AS c ON orders.customer_id = c.id
|
|
325
|
+
WHERE status = $status
|
|
326
|
+
`, { status: 'active' });
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Set Operations (UNION / INTERSECT / EXCEPT)
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
// Combine query results
|
|
333
|
+
const result = await db.query('users', `
|
|
334
|
+
SELECT * FROM active_users
|
|
335
|
+
UNION
|
|
336
|
+
SELECT * FROM archived_users
|
|
337
|
+
`);
|
|
338
|
+
|
|
339
|
+
// Find common elements
|
|
340
|
+
const result = await db.query('users', `
|
|
341
|
+
SELECT id FROM premium_users
|
|
342
|
+
INTERSECT
|
|
343
|
+
SELECT id FROM active_users
|
|
344
|
+
`);
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Hybrid Search with USING FUSION
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
// RRF fusion (default)
|
|
351
|
+
const result = await db.query('docs', `
|
|
352
|
+
SELECT * FROM docs
|
|
353
|
+
USING FUSION(strategy = 'rrf', k = 60)
|
|
354
|
+
LIMIT 20
|
|
355
|
+
`);
|
|
356
|
+
|
|
357
|
+
// Weighted fusion
|
|
358
|
+
const result = await db.query('docs', `
|
|
359
|
+
SELECT * FROM docs
|
|
360
|
+
USING FUSION(strategy = 'weighted', vector_weight = 0.7, graph_weight = 0.3)
|
|
361
|
+
LIMIT 20
|
|
362
|
+
`);
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## VelesQL Query Builder (v1.2.0+)
|
|
366
|
+
|
|
367
|
+
Build type-safe VelesQL queries with the fluent builder API.
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
import { velesql } from '@wiscale/velesdb-sdk';
|
|
371
|
+
|
|
372
|
+
// Graph pattern query
|
|
373
|
+
const builder = velesql()
|
|
374
|
+
.match('d', 'Document')
|
|
375
|
+
.nearVector('$queryVector', queryVector)
|
|
376
|
+
.andWhere('d.category = $cat', { cat: 'tech' })
|
|
377
|
+
.limit(10);
|
|
378
|
+
|
|
379
|
+
const queryString = builder.toVelesQL();
|
|
380
|
+
const params = builder.getParams();
|
|
381
|
+
const results = await db.query('documents', queryString, params);
|
|
382
|
+
|
|
383
|
+
// Graph traversal with relationships
|
|
384
|
+
const graphQuery = velesql()
|
|
385
|
+
.match('p', 'Person')
|
|
386
|
+
.rel('KNOWS')
|
|
387
|
+
.to('f', 'Person')
|
|
388
|
+
.where('p.age > 25')
|
|
389
|
+
.return(['p.name', 'f.name'])
|
|
390
|
+
.toVelesQL();
|
|
391
|
+
```
|
|
392
|
+
|
|
249
393
|
## Error Handling
|
|
250
394
|
|
|
251
395
|
```typescript
|