sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skapar man enkel suddig sökning med endast PostgreSQL?

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;


  1. Android sqlite db.query leder till CursorIndexOutOfBoundsException

  2. Vad är en relationsdatabas?

  3. Hur man använder INNER JOIN i SQL

  4. JSON_VALUE() Funktion i Oracle