The syntax
| Pattern | Meaning | Example |
|---|---|---|
| term | A word to match | supabase |
| "phrase" | An exact phrase | "supabase auth" |
| A OR B | Either term | supabase OR firebase |
| A AND B | Both terms (AND is implied) | supabase AND pricing |
| -term or NOT term | Exclude a term | supabase -firebase |
| site:domain | Restrict to a domain or path | site:reddit.com/r/webdev |
| author:@handle | Restrict to an author | author:@pg |
| lang:code | Language filter | lang:en |
| (A OR B) C | Grouping | (supabase OR firebase) pricing |
Per-source translation
Each source has a native search language. The planner maps the discatch query into it. Every source’s results are re-filtered locally against the full boolean query, so a source with a weaker native language still returns correct results from a larger candidate set.
| Source | How the planner maps it |
|---|---|
| Web (via the web index) | Native operators pass through; site: and quotes map directly |
| Hacker News | query plus tags and numericFilters for since |
| Discourse | Per-forum /search.json?q= with after: and category: |
| GitHub | Search API qualifiers: in:title,body, repo:, is:issue |
| Mastodon | Per-instance search; hashtags only unless full text is enabled |
| YouTube | Data API q on videos, local match on comments |
| Bluesky | Local term match on the Jetstream stream; boolean evaluated in the normalizer |
Prescore
Prescore is a free, non-LLM relevance estimate in [0, 1]. It ranks and filters but does not decide relevance. That is the caller’s model, or the classify flag.
| Signal | Weight |
|---|---|
| Exact phrase hit | 0.35 |
| Term coverage | 0.25 |
| Title hit | 0.15 |
| Recency (decays over 30 days) | 0.10 |
| Engagement (log of replies plus score) | 0.10 |
| Source weight (per account, learnable) | 0.05 |