sql >> Databáze >  >> RDS >> PostgreSQL

Jak vytvořit jednoduché fuzzy vyhledávání pouze s PostgreSQL?

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;


  1. Odstranění duplicitních řádků z tabulky v Oracle

  2. Jak vytvářet a mazat databáze a tabulky v MySQL

  3. Pomocí MariaDB

  4. Advanced SQL:Variace a různé případy použití T-SQL Insert Statement