naumu
Spaces & GraphsSearch

Search

Find anything with hybrid search that blends keyword matching and semantic meaning.

Updated June 2, 20263 min read

Most search tools force a choice: match the exact words you typed, or guess at what you meant. Naumu does both at once. Every query runs two searches side by side — one looking for your exact words, one looking for your meaning — then blends the results into a single ranked list.

How hybrid search works

A hybrid search combines two ways of finding things:

  • Text matching looks for the exact words in your query. This is what you want for UUIDs, proper nouns, code-like strings, and specific labels you remember word for word.
  • Semantic matching compares the meaning of your query against the meaning of each node. So a search for "login" can surface a node titled "authentication flow" even though the two share no words.

Naumu runs both searches, then merges them with a technique called Reciprocal Rank Fusion (RRF). RRF rewards any item that one search ranked highly — and rewards it even more when both searches agree. The payoff is a single list ordered by combined confidence, rather than by one signal alone.

Each result carries a matchedVia tag that tells you why it surfaced:

TagMeaningConfidence
bothFound by exact text and by meaningHighest
semanticFound by meaning onlyMedium
textFound by exact tokens onlyMedium

When a query is vague and even the best match is only loosely relevant, Naumu applies an adaptive cutoff: it trims the list instead of padding it with weak results. The goal is a short, confident set of hits rather than a long, noisy one.

Hybrid search ranks the nodes in a space — the building blocks of your graph, such as people, tasks, ideas, features, and notes. It looks at both a node's label and its content, so a note's full text is searched, not just its title.

Conversations are searched separately. To find a specific chat thread, use the search box at the top of the Conversations list rather than node search — it filters your threads by name.

Filtering by type and connection

You can narrow a search before it runs:

  • By type — limit results to specific node types (for example, only Feature and Pain nodes). This keeps the ranking focused on the kind of thing you're actually looking for.
  • By connection — when you open a node, its connected nodes are listed right alongside it. That lets you jump from a search hit to everything it relates to, without running a new search.

Sometimes you need a precise, complete answer instead of a ranked best guess — "every in-progress Task," or "all Bugs that aren't resolved." For that, reach for a view with filters. A view returns every matching node by type and attribute, with no semantic ranking and nothing left out.

A simple rule of thumb: search is for "find me roughly the right thing, fast." Filtered views are for "give me the complete set."

A practical tip: mix synonyms with exact tokens

Because the two halves of the search complement each other, you don't have to choose between them. Put both in the same query.

A search like auth login SSO 2fa works well: the semantic half latches onto the concept of authentication, while the exact words catch nodes that literally say "SSO" or "2fa." Naumu sorts out any overlap for you. The same trick helps when you half-remember a name — combine the meaning ("billing customer") with the exact fragment you recall ("Acme") in a single query.

If a search comes back thin, add a synonym or two rather than rephrasing entirely. You're widening the semantic net without losing the exact-token matches you already had.

  • Views — deterministic, filterable lists when you need the complete set
  • Nodes & edges — the entities and connections that search ranks over
Anything missing?
Tell us what would make these docs better.