Volledige tekst zoeken (FTS)
Je zou plainto_tsquery()
. kunnen gebruiken naar (per documentatie
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Gebruik het als:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Maar dat is nog steeds vrij streng en biedt slechts een zeer beperkte tolerantie voor gelijkenis.
Trigram-overeenkomst
Misschien beter geschikt om te zoeken naar overeenkomst , zelfs typefouten tot op zekere hoogte overwinnen.
Installeer de extra module pg_trgm
, maak een GiST-index en gebruik de similarity-operator %
in een zoekopdracht naaste buren :
Kortom, met een trigram GiST-index op 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;
Meer:
- Snel vergelijkbare strings vinden met PostgreSQL
- Vergelijkbare berichten vinden met PostgreSQL
- Langzaam zoeken in volledige tekst naar termen die veel voorkomen
Beide combineren
Je kunt zelfs FTS en trigram-overeenkomst combineren: