Búsqueda de texto completo (FTS)
Podrías usar plainto_tsquery()
a (por documentación
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Úselo como:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Pero eso sigue siendo bastante estricto y solo proporciona una tolerancia muy limitada a la similitud.
Semejanza de trigramas
Podría ser más adecuado para buscar similitud , incluso superar errores tipográficos hasta cierto punto.
Instale el módulo adicional pg_trgm
, cree un índice GiST y use el operador de similitud %
en una búsqueda de vecino más cercano :
Básicamente, con un índice de trigrama GiST en 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;
Más:
- Encontrar cadenas similares con PostgreSQL rápidamente
- Encontrar publicaciones similares con PostgreSQL
- Búsqueda lenta de texto completo para términos con alta frecuencia
Combina ambos
Incluso puedes combinar FTS y similitud de trigramas: