Keyword branch: graded overlap and a pure RRF term¶
Status: accepted (2026-07-06), implementation pending
Hybrid search's keyword branch had two defects. (1) plainto_tsquery ANDs every
query term, so multi-word natural-language questions (the exact input MCP and
the benchmarks send) usually matched nothing — the branch was all-or-nothing.
(2) The fused term keyword_score = (rrf_semantic + rrf_keyword) × 30 paid
~half the configured keyword weight back to semantic rank, cutting keyword's
effective contribution to ~0.10 of the score and double-counting semantic
evidence. Decision: (1) parse with websearch_to_tsquery and, when it yields
zero matches, retry the keyword CTE with significant terms OR-joined so
ts_rank grades partial overlap; (2) make the term pure —
keyword_score = rrf_keyword × 61 (rank-1 ≈ 1.0) — leaving $6 × semantic_score
as the only place semantic rank is rewarded. Benchmark-visible change: requires
a rerun or disclosure, same as ADR 0006.