From eb6c06e683ba6585938b8cff8cab53d61c645d82 Mon Sep 17 00:00:00 2001 From: Sacha Al Himdani Date: Tue, 7 Apr 2026 18:49:18 +0200 Subject: [PATCH] Move document search_vector from documents to document_versions Now that title lives on document_versions, the full-text search vector belongs there too. Drop the generated column and GIN index from documents, recreate them on document_versions, and update the document filter to query the latest version's search_vector. Signed-off-by: Sacha Al Himdani --- pkg/coredata/document_filter.go | 8 +++++++- pkg/coredata/migrations/20260407T120000Z.sql | 11 +++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) 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);