You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Embedding index cold-start** (`rushdb-core`): `POST /ai/indexes` no longer requires the indexed property to exist in Neo4j before creating the index policy. When no property node exists (no records with that property have been created yet), type validation is skipped — the property will be created naturally when the first record carrying it is written. Previously the server threw `NotFoundException`.
9
+
10
+
**`DBRecordInstance.score` getter** (`@rushdb/javascript-sdk`): Records returned by `records.vectorSearch()` now expose a typed `score` getter (`number | undefined`) that mirrors `data.__score`. Regular `find()`/`search()` results return `undefined`.
11
+
12
+
**`records.createMany` vectors overload** (`@rushdb/javascript-sdk`): The `vectors` parameter now accepts both `VectorEntry[]` and `VectorEntry[][]`. A flat `VectorEntry[]` list is auto-wrapped into per-record entries, so single-record batches can omit the outer array nesting.
13
+
14
+
**Import form label reset** (`rushdb-dashboard`): The label field in the import data page is now cleared whenever the user goes back to the method-selection step, uploads a new file, or switches to the CSV editor — preventing stale labels from persisting across import iterations.
15
+
16
+
**Docs updated** (`docs`): `indexing.md` revised to reflect that index creation no longer requires the property to already exist. `write-with-vectors.mdx` and `bring-your-own-vectors.mdx` document the flat `VectorEntry[]` overload. `semantic-search.mdx` mentions the `record.score` convenience getter. TS reference docs (`RushDB.md`, `DBRecordInstance.md`) describe the flat `vectors` form and the `score` getter. Python reference docs (`RushDB.md`) mention the flat `vectors` form. All tutorial code examples (15 `.mdx` files) now prefer the `.score` getter over raw `__score` access. `manage-indexes.mdx` error reference updated to remove the stale 404 row (property no longer needs to exist). All incorrect `where: { __id: ... }` filter patterns replaced with `where: { $id: ... }` across 12 tutorial files (TS, Python, and Shell code blocks).
Loosen datetime detection on import: `YYYY-MM-DD` (date-only) strings are now automatically typed as `datetime`, not just full ISO 8601 timestamps. This means values like `2026-07-23` work the same as `2026-07-23T12:00:00Z` — they get datetime comparisons, time-based aggregations, and the correct `__proptypes` entry — without any extra configuration.
Copy file name to clipboardExpand all lines: docs/docs/learn/records-and-queries/import-data.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -39,7 +39,7 @@ graph LR
39
39
### The ingestion pipeline
40
40
41
41
1.**Parse** — BFS walk. Each nested object becomes a separate record.
42
-
2.**Type inference** — Every value is classified as `string`, `number`, `boolean`, or `datetime`. A `null` value (or an all-`null` array) is treated as unset and is not stored.
42
+
2.**Type inference** — Every value is classified as `string`, `number`, `boolean`, or `datetime`. Both ISO 8601 strings (`2026-07-23T12:00:00Z`) and date-only strings (`2026-07-23`) are inferred as `datetime`. A `null` value (or an all-`null` array) is treated as unset and is not stored.
43
43
3.**Label assignment** — Top-level arrays and object records use the label you provide. Container objects can omit `label` when each top-level value is an object or an array of nested records; each top-level key becomes the label for its nested records. Nested objects derive their label from the parent key name (e.g., key `"engine"` → label `Engine`).
44
44
4.**Relationship creation** — Parent → child records are linked with default relationships (`__RUSHDB__RELATION__DEFAULT__`).
|`import_json(data, label, *, options, transaction)`| Import nested/complex JSON payloads; `label` may be omitted for container objects whose top-level values are objects or arrays of nested records |
49
-
|`import_csv(label, data, *, options, parse_config, vectors, transaction)`| Import records from CSV text |
50
-
|`upsert(data, label, *, options, vectors, transaction)`| Create or update a record |
51
-
|`set(target, data, *, label, vectors, transaction)`| Replace all fields of a record |
52
-
|`update(target, data, *, transaction)`| Partially update a record |
|`create(label, data, *, options, vectors, transaction)`| Create a single record |
47
+
|`create_many(label, data, *, options, vectors, transaction)`| Create multiple flat records. `vectors` accepts both a flat list of dicts (one per row, auto-wrapped) and a nested list of lists (explicit per-row entries)|
48
+
|`import_json(data, label, *, options, transaction)`| Import nested/complex JSON payloads; `label` may be omitted for container objects whose top-level values are objects or arrays of nested records |
49
+
|`import_csv(label, data, *, options, parse_config, vectors, transaction)`| Import records from CSV text |
50
+
|`upsert(data, label, *, options, vectors, transaction)`| Create or update a record |
51
+
|`set(target, data, *, label, vectors, transaction)`| Replace all fields of a record |
52
+
|`update(target, data, *, transaction)`| Partially update a record |
Copy file name to clipboardExpand all lines: docs/docs/learn/reference/rest-api/ai-and-vectors/indexing.md
+2-3Lines changed: 2 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,7 +68,7 @@ Returns all embedding index policies for the project.
68
68
69
69
`POST /api/v1/ai/indexes`
70
70
71
-
Creates a new managed embedding index policy scoped to a label. The property must exist in the graph and have type `string` (scalar or list).
71
+
Creates a new embedding index policy scoped to a label. If the property already exists in the graph, its type must be `string` (scalar or list). If no records with this property exist yet, the index is created without type validation — the property node will be established when the first record carrying it is written.
72
72
73
73
### Request Body
74
74
@@ -136,8 +136,7 @@ curl -X POST https://api.rushdb.com/api/v1/ai/indexes \
|`suggestTypes`|`true`| Infer property types automatically. Both ISO 8601 (`2026-07-23T12:00:00Z`) and date-only (`2026-07-23`) strings are detected as `datetime`.|
52
52
|`convertNumericValuesToNumbers`|`false`| Convert string numbers to number type |
53
53
|`capitalizeLabels`|`false`| Uppercase all inferred label names |
54
54
|`skipEmptyValues`|`false`| Treat empty strings (`""`) and empty arrays (`[]`) as unset — no property is created. `0` and `false` are kept. |
Copy file name to clipboardExpand all lines: docs/docs/learn/reference/typescript/DBRecordInstance.md
+22Lines changed: 22 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -45,6 +45,28 @@ data?: DBRecordInferred<S, Q>
45
45
46
46
The actual record data, which may include computed metric fields if the record was retrieved via a query with select/groupBy. The legacy aggregate clause is deprecated and only present for vector similarity until select supports it.
47
47
48
+
### score
49
+
50
+
```typescript
51
+
getscore(): number|undefined
52
+
```
53
+
54
+
Relevance score from a vector/semantic search result. Returns `undefined` for records fetched outside of `records.vectorSearch()`.
55
+
56
+
**Example:**
57
+
58
+
```typescript
59
+
const results =awaitdb.records.vectorSearch({
60
+
labels: ['DOC'],
61
+
propertyName: 'content',
62
+
query: 'machine learning',
63
+
limit: 10
64
+
})
65
+
results.forEach((r) => {
66
+
console.log(r.score) // e.g. 0.9214; undefined for non-vector results
0 commit comments