Służą bardzo różnym celom.
- Wyszukiwanie pełnotekstowe służy do zwracania dokumentów, które pasują do zapytania wyszukiwania zawierającego słowa kluczowe.
- Trygramy dają metodę porównywania dwóch ciągów i określania, jak wyglądają podobnie.
Rozważ następujące przykłady:
SELECT 'cat' % 'cats'; --true
Powyższe zwraca prawdę, ponieważ 'cat'
jest bardzo podobny do 'cats'
(zgodnie z limitem pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false
Powyższe zwraca false
ponieważ %
szuka podobnie między dwoma całymi ciągami, nie szuka słowa cats
w ciąg.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Zwraca to true
ponieważ tsvector przekształcił łańcuch w listę słów tematycznych i zignorował kilka popularnych słów (słowa stop - jak 'is' i 'a')... a następnie wyszukał wersję cats
z tematem głównym .
Wygląda na to, że chcesz używać trygramów do autokorekty Twoje ts_query
ale tak naprawdę nie jest to możliwe (w każdym razie nie w żaden efektywny sposób). Tak naprawdę nie wiedzą słowo jest błędnie napisane, jak podobne może być do innego słowa. mogli być używane do przeszukiwania tabeli słów w celu znalezienia podobnych słów, co pozwala na zaimplementowanie funkcji typu „czy miałeś na myśli...”, ale to słowo wymaga utrzymania oddzielnej tabeli zawierającej wszystkie słowa użyte w wyszukiwaniu search
pole.
Jeśli masz często błędnie napisane słowa/frazy, które chcesz dopasować do indeksu tekstowego, możesz zajrzeć do słowników synonimów