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

Hvordan laver man en simpel fuzzy søgning kun med PostgreSQL?

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;


  1. Sidst udførte forespørgsler for en specifik database

  2. En oversigt over PostgreSQL &MySQL krydsreplikering

  3. ORA-00604 ORA-12705

  4. Er SELECT-type-forespørgsler den eneste type, der kan indlejres?