-- Migrasjon 011: Fulltekstsøk for publiserte artikler -- -- Legger til tsvector-kolonne på nodes-tabellen og GIN-indeks -- for effektivt fulltekstsøk i publisert innhold. -- Brukes av dynamiske søkesider i publiseringssystemet. -- tsvector-kolonne som oppdateres automatisk via trigger ALTER TABLE nodes ADD COLUMN IF NOT EXISTS search_vector tsvector; -- GIN-indeks for rask fulltekstsøk CREATE INDEX IF NOT EXISTS idx_nodes_search_vector ON nodes USING GIN (search_vector); -- Trigger-funksjon som oppdaterer search_vector ved insert/update CREATE OR REPLACE FUNCTION update_search_vector() RETURNS trigger AS $$ BEGIN NEW.search_vector := setweight(to_tsvector('norwegian', COALESCE(NEW.title, '')), 'A') || setweight(to_tsvector('norwegian', COALESCE(NEW.content, '')), 'B'); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Trigger på nodes-tabellen DROP TRIGGER IF EXISTS trg_nodes_search_vector ON nodes; CREATE TRIGGER trg_nodes_search_vector BEFORE INSERT OR UPDATE OF title, content ON nodes FOR EACH ROW EXECUTE FUNCTION update_search_vector(); -- Populer eksisterende noder UPDATE nodes SET search_vector = setweight(to_tsvector('norwegian', COALESCE(title, '')), 'A') || setweight(to_tsvector('norwegian', COALESCE(content, '')), 'B') WHERE search_vector IS NULL;