PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come creare una semplice ricerca fuzzy solo con PostgreSQL?

Postgres fornisce un modulo con diverse funzioni di confronto di stringhe come soundex e metaphone. Ma vorrai usare la funzione di modifica della distanza di levenshtein.

Example:

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

Il 2 è la distanza di modifica tra le due parole. Quando lo applichi a un numero di parole e ordini in base al risultato della distanza di modifica, avrai il tipo di corrispondenze sfocate che stai cercando.

Prova questo esempio di query:(con i tuoi nomi di oggetti e dati ovviamente)

SELECT * 
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10

Questa query dice:

Dammi i primi 10 risultati di tutti i dati da some_table in cui la distanza di modifica tra il valore del codice e l'input 'AB123-lHdfj' è inferiore a 3. Recupererai tutte le righe in cui il valore del codice è entro 3 caratteri di differenza da ' AB123-lHdfj'...

Nota:se ricevi un errore del tipo:

function levenshtein(character varying, unknown) does not exist

Installa fuzzystrmatch estensione utilizzando:

test=# CREATE EXTENSION fuzzystrmatch;