Pesquisa de texto completo (FTS)
Você pode usar
plainto_tsquery()
para (por documentação
) ... SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Use-o como:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Mas isso ainda é bastante rigoroso e fornece apenas uma tolerância muito limitada à semelhança.
Semelhança de trigrama
Pode ser mais adequado para pesquisar semelhança , até mesmo superar erros de digitação até certo ponto.
Instale o módulo adicional
pg_trgm
, crie um índice GiST e use o operador de similaridade %
em uma pesquisa do vizinho mais próximo :Basicamente, com um índice trigrama GiST em
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;
Mais:
- Encontrar strings semelhantes com o PostgreSQL rapidamente
- Encontrar postagens semelhantes com o PostgreSQL
- Pesquisa de texto completo lenta para termos com alta ocorrência
Combine ambos
Você pode até combinar a semelhança de FTS e trigrama: