Skip to content

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).