Postgres poskytuje modul s několika funkcemi pro porovnávání strun, jako je soundex a metafon. Budete však chtít použít funkci úpravy vzdálenosti levenshtein.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
2
je editační vzdálenost mezi dvěma slovy. Když to použijete na několik slov a seřadíte podle výsledku vzdálenosti úprav, budete mít typ fuzzy shody, který hledáte.
Zkuste tento příklad dotazu:(samozřejmě s vlastními názvy objektů a daty)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Tento dotaz říká:
Dejte mi 10 nejlepších výsledků všech dat z some_table, kde je editační vzdálenost mezi hodnotou kódu a vstupem 'AB123-lHdfj' menší než 3. Dostanete zpět všechny řádky, kde je hodnota kódu v rozmezí 3 znaků rozdíl od ' AB123-lHdfj'...
Poznámka:Pokud se zobrazí chyba jako:
function levenshtein(character varying, unknown) does not exist
Nainstalujte fuzzystrmatch
rozšíření pomocí:
test=# CREATE EXTENSION fuzzystrmatch;