sql >> Database >  >> RDS >> PostgreSQL

Hoe maak je een eenvoudige fuzzy search met alleen PostgreSQL?

Postgres levert een module met verschillende snaarvergelijkingsfuncties zoals soundex en metaphone. Maar je zult de levenshtein edit distance-functie willen gebruiken.

Example:

test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)

De 2 is de bewerkingsafstand tussen de twee woorden. Wanneer u dit toepast op een aantal woorden en sorteert op het resultaat van de bewerkingsafstand, krijgt u het type vage overeenkomsten waarnaar u op zoek bent.

Probeer dit voorbeeld van een zoekopdracht:(met uw eigen objectnamen en gegevens natuurlijk)

SELECT * 
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10

Deze zoekopdracht zegt:

Geef me de top 10 resultaten van alle gegevens uit een tabel waarbij de bewerkingsafstand tussen de codewaarde en de invoer 'AB123-lHdfj' kleiner is dan 3. U krijgt alle rijen terug waar de waarde van de code binnen 3 tekens verschilt van ' AB123-lHdfj'...

Opmerking:als u een foutmelding krijgt zoals:

function levenshtein(character varying, unknown) does not exist

Installeer de fuzzystrmatch extensie met:

test=# CREATE EXTENSION fuzzystrmatch;


  1. Een tijdelijke oplossing voor de limiet van 255 kolommen voor toegang

  2. Upgrade PostgreSQL van 9.6 naar 10.0 op Ubuntu 16.10

  3. SQL:selecteer records waarbij ALLE samengevoegde records aan een bepaalde voorwaarde voldoen

  4. Hoe het mysql root-wachtwoord opnieuw in te stellen?