Volltextsuche (FTS)
Sie könnten plainto_tsquery()
verwenden zu (pro Dokumentation
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Verwenden Sie es wie folgt:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Aber das ist immer noch ziemlich streng und bietet nur eine sehr begrenzte Toleranz für Ähnlichkeiten.
Trigramm-Ähnlichkeit
Eignet sich möglicherweise besser für die Suche nach Ähnlichkeit , bis zu einem gewissen Grad sogar Tippfehler überwinden.
Installieren Sie das zusätzliche Modul pg_trgm
, erstellen Sie einen GiST-Index und verwenden Sie den Ähnlichkeitsoperator %
bei einer Nächsten-Nachbarn-Suche :
Grundsätzlich mit einem Trigramm GiST-Index auf sentence
:
-- SELECT set_limit(0.3); -- adjust tolerance if needed
SELECT *
FROM tbl
WHERE sentence % 'My new sentence'
ORDER BY sentence <-> 'My new sentence'
LIMIT 10;
Mehr:
- Schnell ähnliche Zeichenfolgen mit PostgreSQL finden
- Suchen ähnlicher Posts mit PostgreSQL
- Langsame Volltextsuche nach Begriffen mit hohem Vorkommen
Kombiniere beides
Sie können sogar FTS und Trigrammähnlichkeit kombinieren: