Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
|
it:postgresql:czech_fulltext [2015/04/22 14:26] kourim vytvořeno |
it:postgresql:czech_fulltext [2015/05/19 14:21] (aktuální) kourim [Zajímavé odkazy] |
||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ===== České fulltext vyhledávání ===== | + | ===== Fulltext vyhledávání ===== |
| - | Popis jak nastavit fulltextové vyhledávání v postgres za pomocí českého ispell slovníku. | + | Popis jak nastavit české fulltextové vyhledávání v postgresql za pomocí českého ispell slovníku. |
| - | - vytvoříme sloupeček, ve kterém se bude hledat <sxh sql; first-line: 1; title: Basic usage>ALTER TABLE items ADD COLUMN search_text TSVECTOR DEFAULT NULL;</sxh> | + | - vytvoříme sloupeček, ve kterém se bude hledat <sxh sql>ALTER TABLE items ADD COLUMN search_text TSVECTOR DEFAULT NULL;</sxh> |
| - | - do /usr/share/postgresql/9.3/tsearch_data je potřeba nahrát slovníky | + | - do /usr/share/postgresql/9.3/tsearch_data je potřeba nahrát slovníky {{:it:postgresql:ispell-czech.zip|český ispell}} |
| - | - je potřeba vytvořit slovník <sxh sql; first-line: 1; title: Basic usage>CREATE TEXT SEARCH DICTIONARY czech_ispell ( | + | - je potřeba vytvořit slovník <sxh sql>CREATE TEXT SEARCH DICTIONARY czech_ispell ( |
| TEMPLATE = ispell, | TEMPLATE = ispell, | ||
| DictFile = czech, | DictFile = czech, | ||
| Řádek 11: | Řádek 11: | ||
| StopWords = czech | StopWords = czech | ||
| );</sxh> | );</sxh> | ||
| - | - nyní je potřeba vytvořit konfiguraci (tady se dá dost hrat, dole lze definovat spousta slovníků) <sxh sql; first-line: 1; title: Basic usage>CREATE TEXT SEARCH CONFIGURATION public.czech ( COPY = pg_catalog.english ); | + | - nyní je potřeba vytvořit konfiguraci (tady se dá dost hrat, dole lze definovat spousta slovníků) <sxh sql>CREATE TEXT SEARCH CONFIGURATION public.czech ( COPY = pg_catalog.english ); |
| ALTER TEXT SEARCH CONFIGURATION czech | ALTER TEXT SEARCH CONFIGURATION czech | ||
| ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, | ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, | ||
| Řádek 17: | Řádek 17: | ||
| WITH czech_ispell, simple; | WITH czech_ispell, simple; | ||
| ALTER TEXT SEARCH CONFIGURATION czech DROP MAPPING FOR email, url, url_path, sfloat, float;</sxh> | ALTER TEXT SEARCH CONFIGURATION czech DROP MAPPING FOR email, url, url_path, sfloat, float;</sxh> | ||
| - | - vytvoření indexu <sxh sql; first-line: 1; title: Basic usage>UPDATE items SET search_text = to_tsvector('czech', title || ' ' || (attributes->>'identification')::text); | + | - vytvoření indexu <sxh sql>UPDATE items SET search_text = to_tsvector('czech', title || ' ' || (attributes->>'identification')::text); |
| CREATE INDEX search_text_gin ON items USING GIN(search_text);</sxh> | CREATE INDEX search_text_gin ON items USING GIN(search_text);</sxh> | ||
| - | - vytvoříme si trigger, který bude pravidelně index udržovat <sxh sql; first-line: 1; title: Basic usage>CREATE FUNCTION avector_update() RETURNS TRIGGER AS $$ | + | - vytvoříme si trigger, který bude pravidelně index udržovat <sxh sql>CREATE FUNCTION avector_update() RETURNS TRIGGER AS $$ |
| BEGIN | BEGIN | ||
| IF TG_OP = 'INSERT' THEN | IF TG_OP = 'INSERT' THEN | ||
| Řádek 31: | Řádek 31: | ||
| $$ LANGUAGE 'plpgsql'; | $$ LANGUAGE 'plpgsql'; | ||
| CREATE TRIGGER ts_search_text BEFORE INSERT OR UPDATE ON items FOR EACH ROW EXECUTE PROCEDURE avector_update();</sxh> | CREATE TRIGGER ts_search_text BEFORE INSERT OR UPDATE ON items FOR EACH ROW EXECUTE PROCEDURE avector_update();</sxh> | ||
| - | - nyní je možné volat hledání s jazykem czech <sxh sql; first-line: 1; title: Basic usage>SELECT * FROM items where search_text @@ to_tsquery('czech', 'keyword');</sxh> | + | - nyní je možné volat hledání s jazykem czech <sxh sql>SELECT * FROM items where search_text @@ to_tsquery('czech', 'keyword');</sxh> |
| ==== Zajímavé odkazy ==== | ==== Zajímavé odkazy ==== | ||
| * http://antjanus.com/blog/tutorials/using-postgresql-as-a-search-engine/ | * http://antjanus.com/blog/tutorials/using-postgresql-as-a-search-engine/ | ||
| * http://www.postgresql.org/docs/9.3/static/textsearch-dictionaries.html | * http://www.postgresql.org/docs/9.3/static/textsearch-dictionaries.html | ||
| + | * http://www.scottlowe.eu/blog/2011/04/28/postgresql-full-text-search-is-often-good-enough/ | ||