pub const RRF_QUERY: &str = r#"
WITH fts_rank AS (
SELECT cmd_path, row_number() OVER (ORDER BY bm25(apps_fts) ASC) as fts_pos
FROM apps_fts WHERE apps_fts MATCH :query
),
vec_rank AS (
SELECT cmd_path, row_number() OVER (ORDER BY distance ASC) as vec_pos
FROM commands_vec
WHERE embedding MATCH :query_vector AND k = 100
)
SELECT
arg.cmd_path, arg.node_name, arg.description, arg.risk_level, arg.example_template,
COALESCE(1.0 / (60.0 + fts.fts_pos), 0.0) + COALESCE(1.0 / (60.0 + vec.vec_pos), 0.0) as rrf_score
FROM arguments arg
LEFT JOIN fts_rank fts ON arg.cmd_path = fts.cmd_path
LEFT JOIN vec_rank vec ON arg.cmd_path = vec.cmd_path
WHERE fts.cmd_path IS NOT NULL OR vec.cmd_path IS NOT NULL
ORDER BY rrf_score DESC
LIMIT :limit_num;
"#;Expand description
The Reciprocal Rank Fusion (RRF) hybrid search query combining FTS5 and sqlite-vec.