Busca híbrida
A busca no Notarium é montada a partir de canais independentes que se complementam. A busca de texto completo (léxica) está sempre disponível e não exige configuração. A busca semântica (por significado) e a consideração dos vínculos do grafo são camadas opcionais sobre ela. Os resultados dos canais se fundem em um ranking único e, se as camadas opcionais estiverem indisponíveis, a busca continua funcionando sobre o texto completo — sem erro.
Três canais
| Canal | O que faz | Quando funciona |
|---|---|---|
| Léxico (FTS/BM25) | Encontra ocorrências exatas de palavras e frases, classifica por BM25 | Sempre, sem configuração |
| Semântico (vetores) | Encontra o que é próximo em significado, mesmo sem palavras em comum | Opcional (VECTOR_SEARCH) |
| Graph boost | Traz os vizinhos de um acerto via [[wiki-links]] | Opcional (GRAPH_BOOST), desligado por padrão |
O canal léxico é a base: ele funciona logo após a inicialização, sem nada para instalar. O canal semântico acrescenta a compreensão do significado (sinônimos, paráfrases), e o graph boost acrescenta o conhecimento sobre os vínculos entre as notas.
Como os resultados se fundem
Os canais são combinados pelo algoritmo RRF (Reciprocal Rank Fusion, k=60): cada canal produz a própria lista classificada, e o RRF os funde em um ranking compartilhado por posição, e não por pontuações "brutas" incomparáveis. Assim, uma correspondência léxica e a proximidade semântica são ponderadas em conjunto. A fusão acontece no nível da nota — pelo seu identificador estável.
flowchart LR
q([Consulta]) --> fts[Léxico · FTS/BM25]
q --> vec[Semântico · vetores]
q --> gr[Grafo · 1-hop]
fts --> rrf{Fusão RRF}
vec --> rrf
gr --> rrf
rrf --> res([Resultados])
Se a semântica estiver indisponível
A camada semântica pode estar desligada ou indisponível: o VECTOR_SEARCH não foi habilitado, o stack vetorial não está instalado, o modelo não carregou ou o cálculo do vetor da consulta estourou o tempo limite. Em qualquer um desses casos, a consulta é atendida pelo canal léxico — a busca sempre responde e não gera erro apenas por faltar a semântica.
A busca vetorial puxa um stack nativo pesado (~660 MB em disco) e carrega o modelo de embeddings na memória (centenas de MB de RAM), por isso vem desligada por padrão na imagem pública. Como ativá-la e qual modelo escolher é o que aborda Configuração da busca.
Onde você busca
- Spotlight / OmniSearch — um salto rápido e classificado para uma nota. Aqui funciona a híbrida completa: importa a relevância, não apenas a ocorrência exata da palavra. Veja Busca e Spotlight.
- Filtro do Feed (
?q=no Feed) — um filtro léxico sobre o corpus: ele mantém as notas em que os termos realmente aparecem e se combina com os filtros de pasta, tag e data.
O índice e sua reconstrução
O índice de busca é conhecimento derivado: é construído a partir dos arquivos e totalmente recuperável por uma nova varredura. Um índice por espaço. Trocar o modelo de embeddings não é uma migração, e sim uma reconstrução da parte vetorial a partir do zero. A construção inicial do índice vetorial em um corpus grande leva minutos, ou até horas; durante esse tempo, a interface exibe um indicador "Building search index…", enquanto a própria busca permanece disponível no modo léxico.
Tópicos relacionados: Grafo de conhecimento — de onde vem o terceiro canal, Configuração da busca — ativar a semântica e escolher um nível, File-first — por que o índice é recuperável.