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

Como criar uma pesquisa difusa simples apenas com o PostgreSQL?


O Postgres fornece um módulo com várias funções de comparação de strings, como soundex e metaphone. Mas você vai querer usar a função de distância de edição levenshtein.
Example:

test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)

O 2 é a distância de edição entre as duas palavras. Quando você aplica isso a um número de palavras e classifica pelo resultado da distância de edição, você terá o tipo de correspondência difusa que está procurando.

Experimente este exemplo de consulta:(com seus próprios nomes de objetos e dados, é claro)
SELECT * 
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10

Esta consulta diz:

Dê-me os 10 principais resultados de todos os dados de some_table onde a distância de edição entre o valor do código e a entrada 'AB123-lHdfj' é menor que 3. Você receberá de volta todas as linhas onde o valor do código está dentro de 3 caracteres de diferença para ' AB123-lHdfj'...

Nota:se você receber um erro como:
function levenshtein(character varying, unknown) does not exist

Instale o fuzzystrmatch extensão usando:
test=# CREATE EXTENSION fuzzystrmatch;