Wyszukiwanie pełnotekstowe (FTS)
Możesz użyć plainto_tsquery()
do (zgodnie z dokumentacją
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Użyj go jak:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Ale to nadal jest dość surowe i zapewnia jedynie bardzo ograniczoną tolerancję na podobieństwo.
Podobieństwo trygramów
Może lepiej nadawać się do wyszukiwania podobieństwa , nawet w pewnym stopniu pokonuj literówki.
Zainstaluj dodatkowy moduł pg_trgm
, utwórz indeks GiST i użyj operatora podobieństwa %
w wyszukiwaniu najbliższego sąsiada :
Zasadniczo z trygramowym indeksem GiST w 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;
Więcej:
- Szybkie znajdowanie podobnych ciągów za pomocą PostgreSQL
- Znajdowanie podobnych postów za pomocą PostgreSQL
- Powolne wyszukiwanie pełnotekstowe terminów o dużej liczbie przypadków
Połącz oba
Możesz nawet połączyć FTS i podobieństwo trygramów: