sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo crear una búsqueda difusa simple solo con PostgreSQL?

Postgres proporciona un módulo con varias funciones de comparación de cadenas, como soundex y metaphone. Pero querrá usar la función de distancia de edición de levenshtein.

Example:

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

El 2 es la distancia de edición entre las dos palabras. Cuando aplica esto a una cantidad de palabras y ordena por el resultado de la distancia de edición, obtendrá el tipo de coincidencias aproximadas que está buscando.

Pruebe este ejemplo de consulta:(con sus propios nombres de objeto y datos, por supuesto)

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

Esta consulta dice:

Dame los 10 mejores resultados de todos los datos de some_table donde la distancia de edición entre el valor del código y la entrada 'AB123-lHdfj' es menor que 3. Obtendrás todas las filas donde el valor del código está dentro de 3 caracteres de diferencia a ' AB123-lHdfj'...

Nota:si recibe un error como:

function levenshtein(character varying, unknown) does not exist

Instala el fuzzystrmatch extensión usando:

test=# CREATE EXTENSION fuzzystrmatch;