Slouží k velmi odlišným účelům.
- Fulltextové vyhledávání se používá k vrácení dokumentů, které odpovídají vyhledávacímu dotazu s odvozenými slovy.
- Trigramy vám poskytují metodu pro porovnání dvou řetězců a určení, jak podobné vypadají.
Zvažte následující příklady:
SELECT 'cat' % 'cats'; --true
Výše uvedené vrátí hodnotu true, protože 'cat'
je docela podobný 'cats'
(jak je dáno limitem pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false
Výše uvedené vrátí false
protože %
hledá podobně mezi dvěma celými řetězci, nehledá slovo cats
v rámci řetězec.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
To vrátí true
protože tsvector transformoval řetězec na seznam odvozených slov a ignoroval spoustu běžných slov (stop slova – jako „je“ a „a“)... pak hledal odvozenou verzi cats
.
Vypadá to, že chcete použít trigramy k automatickým opravám váš ts_query
ale to ve skutečnosti není možné (stejně ne žádným efektivním způsobem). Ve skutečnosti to nevědí slovo je špatně napsané, jak moc podobné jinému slovu může být. Mohli lze použít k prohledávání tabulky slov, abyste se pokusili najít podobná slova, což vám umožní implementovat funkci typu „měl jste na mysli...“, ale toto slovo vyžaduje udržování samostatné tabulky obsahující všechna slova použitá při hledání search
pole.
Pokud máte některá běžně chybně napsaná slova/fráze, se kterými chcete, aby se textový rejstřík shodoval, možná se budete chtít podívat na slovníky synonym