PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Volltextsuche und Trigramm-Verwirrung

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