Semantic Search
Scholardo has three kinds of search. Work out which one you want first:
| To search | Use | Where |
|---|---|---|
| Filenames | In-list search | The magnifier in the sidebar sub-tab row |
| Document contents | Semantic search | Cmd+Shift+F |
| Your conversations with agents | Conversation history search | The magnifier in the right pane |
This page is about the middle one: searching your whole library by meaning.
Three retrieval modes
| Mode | How it works | When |
|---|---|---|
| Lexical | Full-text keyword matching (SQLite FTS5) | You remember the exact wording |
| Dense | Vector similarity | You remember the idea, not the phrasing |
| Hybrid | Both, fused by RRF | Default, best in most cases |
Hybrid runs both legs and fuses the rankings, so it misses neither an exact term hit nor a relevant passage that used different words.
Scope
| Scope | Covers |
|---|---|
| All | Notes + sources + sessions (default) |
| Sources | Sources only (Docs / Refs / Feeds) |
| Notes | Notes only |
Notes and sessions are keyword-only
Notes and session transcripts are not embedded, whatever mode you pick. That's a deliberate decision — they're short and well-structured to begin with, and the gain from embedding them doesn't justify the privacy and cost. Semantic retrieval applies to document contents only.
Enabling semantic search
Lexical search works out of the box with no configuration. Semantic search needs an embedding provider — a service that turns text into vectors.
Pick one under Settings → Embeddings:
Ollama (local — use this if privacy matters)
Runs on your own machine. No API key, and nothing leaves the device.
- Install Ollama and make sure the daemon is running
- Pull an embedding model, e.g.
ollama pull bge-m3 - Back in Settings, refresh and select the model
Jina (cloud)
Requires an API key. Paste it in and you're set.
OpenAI-compatible endpoint
Any backend that speaks /v1/embeddings works — supply a Base URL and a Model ID.
Cloud embedding means content leaves your machine
Choosing Jina or any cloud endpoint makes Scholardo ask for explicit consent ("Send embeddings off-device?") and requires you to turn on Enable remote indexing by hand.
This isn't a formality — indexing means the body text of your documents is chunked and sent to a third-party service. If your library holds unpublished data or sensitive material, use Ollama.
How the index is built
Once a provider is selected, Scholardo chunks and embeds your documents in the background. The chunking is adjustable:
- Chunk size (words) — how much text per chunk
- Overlap (words) — how much neighboring chunks overlap, so meaning isn't cut in half
After changing provider, model, or chunking, you need to Rebuild now — old vectors were computed by a different model and aren't comparable to new ones. Rebuilding asks for confirmation, since it discards every existing embedding and starts over.
Agents use the same retrieval
The MCP tool search calls exactly this. Ask an agent to "find the parts of my library about interfacial impedance in solid electrolytes" and it gets the same results you would.
Alongside it:
get_item/batch_get_items— fetch full text by IDlist_sources/list_refs/list_notes— enumerate content
With nothing configured
Without an embedding provider, the search panel still works (lexical) and points you at "Configure semantic search." It won't quietly hand you worse results without saying so.
See also
- Docs — Papers & Documents — how files get into the library
- Agent & MCP Tools — retrieval from the agent's side

