Semantic search
Off by default. In the engine’s settings file (<vault>/.datanotes/service.json) set
semanticEnabled: true, a semanticProvider and a semanticModel; semanticBaseUrl empty uses
the provider’s default address.
semanticProvider |
Where notes go | Default address | Example model |
|---|---|---|---|
ollama |
stays on this computer | http://127.0.0.1:11434 |
nomic-embed-text, qwen3-embedding:0.6b |
lmstudio |
stays on this computer | http://127.0.0.1:1234/v1 |
text-embedding-nomic-embed-text-v1.5 |
openrouter |
OpenRouter and the model’s provider (needs an API key) | https://openrouter.ai/api/v1 |
openai/text-embedding-3-small, qwen/qwen3-embedding-0.6b |
openai |
OpenAI (needs an API key) | https://api.openai.com/v1 |
text-embedding-3-small |
custom |
any OpenAI-compatible /embeddings API |
none: set semanticBaseUrl |
— |
API keys are never kept in the settings: the engine reads DATANOTES_EMBEDDING_KEY, or the file
given with --embedding-key-file.
Each note is cut into passages: title and properties (up to 800 characters, without id and the
table property) with the first one, then one per heading section, long sections cut at paragraph
boundaries (about 1,500 characters); at most 40 passages per note. Passages are embedded and
stored as int8 vectors in .datanotes/semantic/ (the store folder). The index follows edits about
ten seconds after they stop, catches up a few seconds after the engine starts, and re-embeds only
notes whose content changed; a different provider, address or model starts a new index.
Scope: every note, or only table rows (semanticScope: "tables"), minus the folders in
semanticExclude and _archive folders.
Agents and programs use the operations semantic_search (query, with tables, folder,
min_score, limit) and semantic_index (status, update, rebuild).