Vector search
⌘3. Your words are turned into a vector by EmbeddingGemma 2 running on this Mac, and the passages whose vectors are closest come back. It finds “the relationship between soul and body” in a passage that never uses those words. No account, nothing sent anywhere.
Setting it up
- In Shape, open a Text property’s options (click its kind) and switch on Vector search; or right-click the row › Embed for Vector Search. A sparkle appears on the row.
- The first time, a sheet offers the model: Vector search — Embedding turns text into vectors, so Ask can find passages with vector search… The model is a one-time download of 310 MB from Hugging Face (Apache 2.0). Download or Not now. The property stays set either way; its text is embedded as soon as the model is here. The download’s progress, cancel, retry and Remove are in Settings › Vector search, and the same control shows wherever the model’s missing: under the type’s properties in Shape, in the mode popover, in a failed trail step.
- Embedding runs in the background. The top bar shows Embedding 12 of 340; the Shape inspector shows, under the type’s properties, “340 passages · ready for vector search”, “Embedding paused” with Try again, or “Waiting for the model”.
What gets embedded
Each value of an embedded property is split into passages: paragraphs, then sentences packed to about 1,000 characters (at most 1,400) with one sentence of overlap, so each reads as a whole thought. The node’s title is embedded alongside each passage, the way the model was trained. Relationships’ text properties can be embedded too.
The index is kept in step automatically: a node added, edited or renamed (its title changes its passages’ vectors), a property switched on or off, a type or property deleted, a project imported, the app quit mid-way: a reconciler plans what’s missing or stale and fills it in. Renaming a property keeps its vectors.
A second index, always on, embeds every node’s title; it’s what spots likely duplicates when the AI drafts nodes and finds the nodes a message mentions.
Searching
Type what you mean. Commas separate several searches: each keeps what’s close to its own best match, and the results are pooled. ::Type:: scopes work as in Raw Text, naming only embedded properties (see Scopes). The Search in list under the mode shows each embedded property with how many passages it holds; untick to leave some out.
The trail: Running vector search · on this Mac → Ran vector search · 8 matches · 2 ms, with where each term was looked for when scoped, and “12 passages are still being embedded, so some text isn’t searchable yet” when the index isn’t finished.
Ranking
Every passage within the scope is compared by cosine similarity (brute force, with Accelerate; under a millisecond for thousands). Passages more than 0.15 below the best score are left out as noise. The rest are grouped by record, best first, up to 20 matches.
Results
Each match is a card: the node’s bead, title and type (or a relationship’s name and its two ends), and a strength bar (gold, full for the best match, shorter the further down; hover for the similarity). Under it, the matched passage with its property’s name and “passage 2 of 5”, ”…” marking a cut at either end, Expand when four lines cut it short, and N more passages when the record matched in several. When Auto followed connections, chips of what the node links to, each a click away.
Click the card’s header or a passage and the record is selected on the canvas and in the inspector with its matched passages marked, scrolled to the one you clicked. The matches become the answer canvas, with each match’s neighbours (when followed) placed just after it.
When it can’t run
| Trail says | Why |
|---|---|
| Nothing for vector search · No text property is set to Embed yet | with an Open Shape button |
| Nothing for vector search · Every embedded property is unticked | tick one in Search in |
| The embedding model isn’t on this Mac | with Download 310 MB, or “It’s downloading now; ask again when it has finished.” |
| Nothing close | no passage is near your words; “Some text is still being embedded” when the index is incomplete |
The model’s weights load on first use and are let go after three minutes idle, so the first search after a pause takes a moment longer.