WITH vec_matches AS (
SELECT id AS rowid, row_number() OVER (PARTITION BY NULL) AS rank_number
FROM vector_top_k('idx_chunks_vector', vector32(?), ?)
WHERE ? != ''
),
fts_matches AS (
SELECT rowid, row_number() OVER (ORDER BY rank) AS rank_number
FROM chunks_fts WHERE ? != '' AND chunks_fts MATCH ? LIMIT ?
), final AS (
SELECT
chunks.id,
(COALESCE(1.0 / (60 + fts_matches.rank_number), 0.0) +
COALESCE(1.0 / (60 + vec_matches.rank_number), 0.0)) AS combined_rank
FROM chunks
LEFT JOIN fts_matches ON fts_matches.rowid = chunks.rowid
LEFT JOIN vec_matches ON vec_matches.rowid = chunks.rowid
WHERE (? = '' OR fts_matches.rowid IS NOT NULL OR vec_matches.rowid IS NOT NULL)
ORDER BY combined_rank DESC LIMIT ?
)
SELECT * FROM final;