Toto je starší verze dokumentu!
České fulltext vyhledávání
Popis jak nastavit fulltextové vyhledávání v postgresql za pomocí českého ispell slovníku.
- vytvoříme sloupeček, ve kterém se bude hledat
ALTER TABLE items ADD COLUMN search_text TSVECTOR DEFAULT NULL;
- do /usr/share/postgresql/9.3/tsearch_data je potřeba nahrát slovníky český ispell
- je potřeba vytvořit slovník
CREATE TEXT SEARCH DICTIONARY czech_ispell ( TEMPLATE = ispell, DictFile = czech, AffFile = czech, StopWords = czech ); - nyní je potřeba vytvořit konfiguraci (tady se dá dost hrat, dole lze definovat spousta slovníků)
CREATE TEXT SEARCH CONFIGURATION public.czech ( COPY = pg_catalog.english ); ALTER TEXT SEARCH CONFIGURATION czech ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH czech_ispell, simple; ALTER TEXT SEARCH CONFIGURATION czech DROP MAPPING FOR email, url, url_path, sfloat, float; - vytvoření indexu
UPDATE items SET search_text = to_tsvector('czech', title || ' ' || (attributes->>'identification')::text); CREATE INDEX search_text_gin ON items USING GIN(search_text); - vytvoříme si trigger, který bude pravidelně index udržovat
CREATE FUNCTION avector_update() RETURNS TRIGGER AS $$ BEGIN IF TG_OP = 'INSERT' THEN NEW.search_text = to_tsvector('czech', NEW.title || ' ' || (NEW.attributes->>'identification')::text); END IF; IF TG_OP = 'UPDATE' THEN NEW.search_text = to_tsvector('czech', NEW.title || ' ' || (NEW.attributes->>'identification')::text); END IF; RETURN NEW; END $$ LANGUAGE 'plpgsql'; CREATE TRIGGER ts_search_text BEFORE INSERT OR UPDATE ON items FOR EACH ROW EXECUTE PROCEDURE avector_update(); - nyní je možné volat hledání s jazykem czech
SELECT * FROM items where search_text @@ to_tsquery('czech', 'keyword');