Use this file to discover all available pages before exploring further.
Similarity search finds items that are semantically similar to a query by comparing vector embeddings. Build powerful search experiences that understand meaning, not just keywords.
create or replace function hybrid_search ( query_text text, query_embedding vector(1536), match_count int)returns table ( id bigint, content text, similarity float, rank float)language sql stableas $$ with semantic_search as ( select documents.id, row_number() over (order by documents.embedding <=> query_embedding) as rank_number from documents order by documents.embedding <=> query_embedding limit 20 ), keyword_search as ( select documents.id, row_number() over (order by ts_rank(documents.fts, websearch_to_tsquery(query_text)) desc) as rank_number from documents where documents.fts @@ websearch_to_tsquery(query_text) order by ts_rank(documents.fts, websearch_to_tsquery(query_text)) desc limit 20 ) select documents.id, documents.content, 1 - (documents.embedding <=> query_embedding) as similarity, coalesce(1.0 / (60 + semantic_search.rank_number), 0.0) + coalesce(1.0 / (60 + keyword_search.rank_number), 0.0) as rank from documents left join semantic_search on semantic_search.id = documents.id left join keyword_search on keyword_search.id = documents.id where semantic_search.id is not null or keyword_search.id is not null order by rank desc limit match_count;$$;
-- IVFFlat index (faster build, good recall)create index on documents using ivfflat (embedding vector_cosine_ops)with (lists = 100);-- HNSW index (slower build, better recall)create index on documents using hnsw (embedding vector_cosine_ops)with (m = 16, ef_construction = 64);