Skip to content

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.