Consultas aproximadas no PostgreSQL

O PostgreSQL possui um módulo chamado fuzzystrmatch que está no pacote contrib, este módulo possui diversas funções para trabalhar com consultas aproximadas, muito útil quando queremos fazer buscas em palavras com erro de digitação.

Segundo Euler na pgcon 2008 (), esse tipo de consula possui um custo computacional alto..

1 PASSO: ativar o pacote que contém as funções

nei@terra:~$ sudo apt-get install postgresql-contrib-8.3

2 PASSO: criar as funções

No meu caso, já existia o pacote instalado, porém não estava disponível a função, então eu criei ela das seguinte forma:

# /usr/share/postgresql/8.3/contrib/fuzzystrmatch.sql

-- Adjust this setting to control where the objects get created.
SET search_path = public;

CREATE OR REPLACE FUNCTION levenshtein (text,text) RETURNS int
AS '$libdir/fuzzystrmatch','levenshtein'
LANGUAGE C IMMUTABLE STRICT;

3 passo: have fun!

teste=# create table usuario ( nome varchar(100) not null );
teste=# insert into usuario values ( 'patrick' ), ('patric' ), ('petrick');

teste=# SELECT * from usuario where levenshtein( nome, 'patrick' ) = 1;
  nome   
---------
 patric
 petrick
(2 registros)
teste=# SELECT levenshtein('JOAO', 'JOAO');
 levenshtein 
-------------
           0
(1 registro)

teste=# SELECT levenshtein('JOAO', 'JOÃO');
 levenshtein 
-------------
           2
(1 registro)

caracteres com acentos serão contados como 2 caracteres no UTF-8.

referências: http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html

Comentar

O conteúdo deste campo é privado não será exibido ao público. If you have a Gravatar account, used to display your avatar.
  • Quebras de linhas e parágrafos são feitos automaticamente.

Mais informações sobre as opções de formatação

CAPTCHA
Esta questão é utilizada apenas para prevenir envio automático por robôs.
Image CAPTCHA
Digite os caracteres mostrados na imagem.