diff --git a/pkg/coredata/document_filter.go b/pkg/coredata/document_filter.go index 6a604e438..3d154a023 100644 --- a/pkg/coredata/document_filter.go +++ b/pkg/coredata/document_filter.go @@ -131,7 +131,13 @@ func (f *DocumentFilter) SQLFragment() string { ( CASE WHEN @query::text IS NOT NULL AND @query::text != '' THEN - search_vector @@ ( + ( + SELECT dv.search_vector + FROM document_versions dv + WHERE dv.document_id = documents.id + ORDER BY dv.major DESC, dv.minor DESC + LIMIT 1 + ) @@ ( SELECT to_tsquery('simple', string_agg(lexeme || ':*', ' & ')) FROM unnest(regexp_split_to_array(trim(@query::text), '\s+')) AS lexeme ) diff --git a/pkg/coredata/migrations/20260407T120000Z.sql b/pkg/coredata/migrations/20260407T120000Z.sql index 377bbf253..46a9001ef 100644 --- a/pkg/coredata/migrations/20260407T120000Z.sql +++ b/pkg/coredata/migrations/20260407T120000Z.sql @@ -16,3 +16,14 @@ ALTER TABLE documents ALTER COLUMN title DROP NOT NULL; ALTER TABLE documents DROP COLUMN description; + +-- Move search_vector from documents to document_versions. +DROP INDEX documents_search_idx; +ALTER TABLE documents DROP COLUMN search_vector; + +ALTER TABLE document_versions ADD COLUMN search_vector tsvector +GENERATED ALWAYS AS ( + to_tsvector('simple', COALESCE(title, '')) +) STORED; + +CREATE INDEX document_versions_search_idx ON document_versions USING gin(search_vector);