@@ -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,45 +742,32 @@ 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},
757- distance,
758- ROW_NUMBER() OVER (ORDER BY distance) as semantic_rank,
759- COUNT(*) OVER () as max_semantic_rank,
760- 1 - distance as similarity_score
761- FROM (
762- SELECT
763- {join_key},
764- embeddings <=> $1::vector as distance
765- FROM vectorize._embeddings_{job_name}
766- ) sub
767- ORDER BY distance
751+ embeddings <=> $1::vector as distance,
752+ ROW_NUMBER() OVER (ORDER BY embeddings <=> $1::vector) as semantic_rank,
753+ 1 - (embeddings <=> $1::vector) as similarity_score
754+ FROM vectorize._embeddings_{job_name}
755+ ORDER BY embeddings <=> $1::vector
768756 LIMIT {window_size}
769757 ) s
770758 FULL OUTER JOIN (
771759 SELECT
772760 {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',
761+ ROW_NUMBER() OVER (ORDER BY ts_rank_cd(search_tokens, query) DESC) as fts_rank
762+ FROM vectorize._search_tokens_{job_name},
763+ to_tsquery('english',
777764 NULLIF(
778765 replace(plainto_tsquery('english', $2)::text, ' & ', ' | '),
779766 ''
780767 )
781768 ) as query
782769 WHERE search_tokens @@ query
783- ORDER BY ts_rank_cd(search_tokens, query) DESC
770+ ORDER BY ts_rank_cd(search_tokens, query) DESC
784771 LIMIT {window_size}
785772 ) f ON s.{join_key} = f.{join_key}
786773 ) t
@@ -789,7 +776,7 @@ pub fn hybrid_search_query(
789776 ORDER BY t.rrf_score DESC
790777 LIMIT {limit}
791778 ) t"
792- )
779+ )
793780}
794781#[ cfg( test) ]
795782mod tests {
0 commit comments