PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL:Encontre frases mais próximas de uma determinada frase

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:

Combine ambos


Você pode até combinar a semelhança de FTS e trigrama: