Postgres tillhandahåller en modul med flera strängjämförande funktioner som soundex och metafon. Men du kommer att vilja använda funktionen levenshtein redigera avstånd.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
2
är redigeringsavståndet mellan de två orden. När du tillämpar detta mot ett antal ord och sorterar efter resultatet för redigering av avstånd kommer du att få den typ av luddiga matchningar du letar efter.
Prova detta frågeexempel:(med dina egna objektnamn och data förstås)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Den här frågan säger:
Ge mig de 10 bästa resultaten av all data från någon_tabell där redigeringsavståndet mellan kodvärdet och inmatningen 'AB123-lHdfj' är mindre än 3. Du kommer att få tillbaka alla rader där kodens värde är inom 3 teckens skillnad mot ' AB123-lHdfj'...
Obs:om du får ett felmeddelande som:
function levenshtein(character varying, unknown) does not exist
Installera fuzzystrmatch
tillägg med:
test=# CREATE EXTENSION fuzzystrmatch;