Search across everything
Full-text search over messages, customers, and KB articles — with typo tolerance and entity scoping.
Search in Ochre is one box that reaches every word your team has written, every customer record, and every help article. Until late 2025 it was a polite ILIKE wrapper; now it's Postgres full-text plus pgvector, and the difference shows up the first time you mistype a customer's name.
What's searched
- Message bodies — every reply, note, and forward your team has sent or received
- Conversation subjects — and the threaded subject history if it changed
- Customer records — name, email, company, custom fields you've made searchable
- Knowledge base articles — titles, summaries, body, and SEO keywords
- Teammates — for assignment and mentions
Typo tolerance for names
The old search did a substring match. If you typed saraj looking for Sarah, you got nothing — the j killed the lookup. The new pipeline trigram-matches names and emails, so saraj finds Sarah, kateryna finds Katerina, and gogle.com still finds the Gmail customer. We capped the fuzziness deliberately: typos in names get forgiven, typos in invoice numbers don't, because "INV-1023" and "INV-1024" should never collide.
What got better when we replaced ILIKE
The old query plan was a sequential scan over messages.body per search. On a 200,000-message workspace that ran in 1.4–2.6 seconds and scaled with row count. The new pipeline uses a tsvector GIN index for keyword recall, an HNSW pgvector index for semantic recall, and a small ranker that mixes the two. Median search latency dropped to under 90ms on the same data, and the relevance is genuinely better — searching for "billing problem" now surfaces conversations that say "card was declined" without the words "billing" or "problem" appearing anywhere.
Scoping by entity
In the inbox search bar, prefix your query to limit it:
customer:acme— only customer records matching "acme"tag:refund— only conversations tagged refundfrom:lina@— only conversations involving Linakb:webhooks— only KB articles about webhooks
Prefixes stack. tag:refund customer:acme shows refund-tagged conversations from Acme.
KB matching in the same box
The same query that searches conversations also searches your help center. Hits are grouped: conversations first, then customers, then articles. If you're constantly answering the same question and there's a matching article, the search will surface it next to the conversation list — often the prompt to send the link rather than retype the answer.
Was this article helpful?