Sie dienen ganz unterschiedlichen Zwecken.
- Die Volltextsuche wird verwendet, um Dokumente zurückzugeben, die mit einer Suchabfrage nach Wortstämmen übereinstimmen.
- Trigramme bieten Ihnen eine Methode, um zwei Zeichenketten zu vergleichen und festzustellen, wie ähnlich sie aussehen.
Betrachten Sie die folgenden Beispiele:
SELECT 'cat' % 'cats'; --true
Das Obige gibt wahr zurück, weil 'cat'
ist sehr ähnlich zu 'cats'
(wie durch das pg_trgm-Limit vorgegeben).
SELECT 'there is a cat with a dog' % 'cats'; --false
Das Obige gibt false
zurück weil %
sucht in ähnlicher Weise zwischen den beiden vollständigen Zeichenfolgen und nicht nach dem Wort cats
innerhalb die Zeichenfolge.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Dies gibt true
zurück weil tsvector den String in eine Liste von Wortstämmen umgewandelt hat und eine Reihe von gebräuchlichen Wörtern (Stoppwörter - wie 'is' &'a') ignoriert hat... und dann nach der Stammversion von cats
gesucht hat .
Es hört sich so an, als ob Sie Trigramme zur Autokorrektur verwenden möchten Ihre ts_query
aber das ist nicht wirklich möglich (jedenfalls nicht auf effiziente Weise). Sie wissen nicht wirklich ein Wort ist falsch geschrieben, wie ähnlich es einem anderen Wort sein könnte. Sie könnten verwendet werden, um eine Tabelle mit Wörtern zu durchsuchen, um zu versuchen, ähnliche Wörter zu finden, wodurch Sie eine Funktion vom Typ "meinten Sie ..." implementieren können, aber dieses Wort erfordert das Führen einer separaten Tabelle mit allen Wörtern, die in Ihrer search
Feld.
Wenn Sie einige häufig falsch geschriebene Wörter/Phrasen haben, mit denen der Textindex übereinstimmen soll, sollten Sie sich die Synonym-Wörterbücher ansehen