Postgres leverer et modul med flere strengsammenligningsfunktioner såsom soundex og metaphone. Men du vil gerne bruge funktionen levenshtein redigering af afstand.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
2
er redigeringsafstanden mellem de to ord. Når du anvender dette på et antal ord og sorterer efter redigeringsafstandsresultatet, vil du have den type fuzzy matches, som du leder efter.
Prøv dette forespørgselseksempel:(med dine egne objektnavne og data selvfølgelig)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Denne forespørgsel siger:
Giv mig de 10 bedste resultater af alle data fra en_tabel, hvor redigeringsafstanden mellem kodeværdien og input 'AB123-lHdfj' er mindre end 3. Du vil få tilbage alle rækker, hvor værdien af koden er inden for 3 tegns forskel til ' AB123-lHdfj'...
Bemærk:hvis du får en fejl som:
function levenshtein(character varying, unknown) does not exist
Installer fuzzystrmatch
udvidelse ved hjælp af:
test=# CREATE EXTENSION fuzzystrmatch;