@@ -731,8 +731,8 @@ pub fn hybrid_search_query(
731731 }
732732
733733 format ! (
734- "
735- SELECT to_jsonb(t) as results
734+ "
735+ SELECT to_jsonb(t) as results
736736 FROM (
737737 SELECT {cols}, t.rrf_score, t.semantic_rank, t.fts_rank, t.similarity_score
738738 FROM (
@@ -742,21 +742,14 @@ pub fn hybrid_search_query(
742742 s.similarity_score,
743743 f.fts_rank,
744744 (
745- CASE
746- WHEN s.semantic_rank IS NOT NULL THEN {semantic_weight}::float/({rrf_k} + s.semantic_rank)
747- ELSE 0
748- END +
749- CASE
750- WHEN f.fts_rank IS NOT NULL THEN {fts_weight}::float/({rrf_k} + f.fts_rank)
751- ELSE 0
752- END
745+ COALESCE({semantic_weight}::float / ({rrf_k} + s.semantic_rank), 0) +
746+ COALESCE({fts_weight}::float / ({rrf_k} + f.fts_rank), 0)
753747 ) as rrf_score
754748 FROM (
755749 SELECT
756750 {join_key},
757751 distance,
758752 ROW_NUMBER() OVER (ORDER BY distance) as semantic_rank,
759- COUNT(*) OVER () as max_semantic_rank,
760753 1 - distance as similarity_score
761754 FROM (
762755 SELECT
@@ -770,17 +763,16 @@ pub fn hybrid_search_query(
770763 FULL OUTER JOIN (
771764 SELECT
772765 {join_key},
773- ROW_NUMBER() OVER (ORDER BY ts_rank_cd(search_tokens, query) DESC) as fts_rank,
774- COUNT(*) OVER () as max_fts_rank
775- FROM vectorize._search_tokens_{job_name},
776- to_tsquery('english',
766+ ROW_NUMBER() OVER (ORDER BY ts_rank_cd(search_tokens, query) DESC) as fts_rank
767+ FROM vectorize._search_tokens_{job_name},
768+ to_tsquery('english',
777769 NULLIF(
778770 replace(plainto_tsquery('english', $2)::text, ' & ', ' | '),
779771 ''
780772 )
781773 ) as query
782774 WHERE search_tokens @@ query
783- ORDER BY ts_rank_cd(search_tokens, query) DESC
775+ ORDER BY ts_rank_cd(search_tokens, query) DESC
784776 LIMIT {window_size}
785777 ) f ON s.{join_key} = f.{join_key}
786778 ) t
@@ -789,7 +781,7 @@ pub fn hybrid_search_query(
789781 ORDER BY t.rrf_score DESC
790782 LIMIT {limit}
791783 ) t"
792- )
784+ )
793785}
794786#[ cfg( test) ]
795787mod tests {
0 commit comments