Simon-Pierre Boucher
All Groupe Ka projects
Trouve·Ka icon
Groupe Ka
Culture & Discovery

Trouve·Ka

A real search engine, built from scratch in Quebec

Not a metasearch: crawler, frontier, parser, classification, index, ranking and semantics are all homegrown — zero dependency on Google, Bing or Brave for results.

302K+

Pages indexed

14

KA sites indexed

4.6M

Frontier URLs

100%

Semantic coverage

9

Crawl workers / 5 nodes

~2–4 s

Crawl-to-searchable

Overview

Trouve·Ka is a real search engine — not a metasearch. Crawler, frontier, parser, Quebec classification, index, ranking, semantics: everything is built in-house, with no dependency on Google, Bing or Brave for results. Born as an open Quebec-web engine (64 high-authority seeds, 7,898 discovered domains), it pivoted on 2026-08-23 to become the search engine of Groupe Ka: it continuously indexes the ecosystem's 14 sites, fed by daily sitemap ingestion — the frontier alone exceeds 4.6M pending URLs.

The engine's motto: crawl continuously, index immediately, search immediately, improve asynchronously. Every fetched page is scored deterministically for Quebec relevance (TLDs, toponyms, postal codes, area codes, known organizations, language — no LLM in the hot path) and indexed inline in OpenSearch: searchable in about 2–4 seconds. Enrichment — domain authority, entities, embeddings, reranking — arrives afterwards via Redis Streams without ever blocking, with 100% semantic coverage of the index.

In production: 302,000+ pages indexed (and growing by 100K+ on good days), bilingual BM25 ranking with FR/EN synonyms (thermopompe ↔ heat pump), semantic search plus a dedicated reranker, and 258–425 ms measured latency with both active. The crawl is polite and self-healing: an identified TrouveKABot honoring robots.txt and crawl delays, SSRF guards, crawl-trap detection, and nine workers across five cluster nodes coordinated without an orchestrator through Postgres FOR UPDATE SKIP LOCKED — proven to survive node reboots on its own.

Key Features

Immediate indexing

Fetch → parse → score → index inline (OpenSearch refresh 1 s): a page is searchable seconds after being crawled; enrichment never blocks.

Deterministic Quebec scoring

TLDs, toponym gazetteer, postal codes, area codes, known organizations, JSON-LD and language — no LLM in the hot path, and the open-web mode is one config flag away.

Bilingual semantic ranking

BM25 FR/EN with bilingual synonyms + Quebec scores + domain authority + freshness + locality boost, then embeddings and a reranker on top.

Polite, transparent crawler

Identified TrouveKABot with a public page, robots.txt and Crawl-delay honored, per-host politeness locks, SSRF guard, crawl-trap detection.

Self-healing distributed crawl

Nine workers on five nodes with no orchestrator — Postgres SKIP LOCKED + Redis locks, SSH tunnels between nodes, watchdogs, proven reboot survival.

Real public metrics

No simulated counters, by project rule: /status and /stats expose the live engine, refreshed every 10 seconds.

Tech Stack

Engine

Python
OpenSearch 2.17
PostgreSQL frontier
Redis Streams
selectolax

Semantics

Embedding service
Reranker (dedicated node)
100% index coverage

Frontend

Next.js proxy
FastAPI API
ka-ui

Trouve·Ka is live

The search engine of the Quebec web — part of the Groupe Ka ecosystem.

www.trouve-ka.com