Re: tsearch2 vs. like

From: marcelo Cortez <jmdc_marcelo(at)yahoo(dot)com(dot)ar>
To: Jose Maria Mencia Fernandez <jmencia(at)alimarket(dot)es>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: tsearch2 vs. like
Date: 2008-02-20 12:22:20
Message-ID: 970488.40965.qm@web32101.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jose Maria,

--- Jose Maria Mencia Fernandez <jmencia(at)alimarket(dot)es>
escribió:

> El mar, 19-02-2008 a las 15:26 -0300, Alvaro Herrera
> escribió:
> > Jose Maria Mencia Fernandez escribió:
> > >
> > > > ¿Cuales? No todas funcionan de la misma
> forma.
> > > No entiendo muy bien la pregunta ¿cuales? pero
> realmente me he limitado
> > > a consultas del tipo LIKE '%xxxx%'. No se me
> ocurre otra forma de buscar
> > > cualquier cadena de texto en cualquier posición
> de un campo de texto.
> >
> > Supongamos que tienes almacenado en la BD
> "Farmacia La Guájira".
> > ¿Cuáles son los criterios de búsqueda que quieres
> que te entregue ese
> > registro? Si el usuario ingresa "cia", ¿debe
> aparecer? ¿si ingresa
> > "la"? ¿si ingresa "guaj"? ¿Si ingresa
> "farmacias"?
> >
>
> Normalmente el usuario obviará en la cadena de
> búsqueda palabras y
> caracteres poco determinantes para el nombre. En el
> ejmplo que me pones
> seguramente nunca se harán búsquedas por 'La'
> (aunque no las descarto)
> pero sí por cualquier substring dentro de los
> términos 'Farmacia' y
> 'Guájira'. Con decir, substring también estoy
> asumiendo que no se
> necesita búsquedas por 'farmacias', por ejmeplo, ya
> que excede la
> longitud y contenido de la palabra 'Farmacia'.
> Mi objetivo es encontrar este registro con criterios
> como:
> 'farmacia jira'
> 'farma'
> 'guaj'
> 'cia ajir'
> 'FARMACIA GUAJIRA'
> 'Guajira'
> 'Farmacia la'
> etc ...
> En la parte de aplicación me encargaría de
> reemplazar los caracteres
> 'blanco' por el comodín pertinente a usar en la
> sentencia SQL.
>
> Espero haberme explicado ...

Tengo un sistema en postgres ,con casi los mismo
requerimientos, un poco mas complejo, ademas de buscar
substring busco por igualdad fonetica,( debido a lo
cual me tuve que hacer mis propias funciones en C),
EL tema es que el like busca el string tal cual, el
fts te convierte las palabras de su string a lexemes (
una base fonetica,singular en tiempo infinitivo) y
ademas le aplica los stop words, palabras que no va a
buscar,(por ejemplo preposiciones, a ante el los las
etc), asi el fts es muy potente pero en una config
español matchearia, 'mujeres' 'mujercitas' 'hembra'
con la palabra 'mujer', es simple la base de todas
esas palabras el lexeme seria mujer y en todos los
casos buscaria con mujer.
Yo hago las 2 busquedas, no solo ello sino que en mi
sistema parto de una base "maestra" historica y una de
novedades, tomando solo en cuenta los campos de
busqueda y por cada registro del maestro busco
coincidencias en el de novedades tambien por cada sub
string es un doble loop

for cada substring maestro
for cada substring de novedades
end
end

para ellos empleo funciones con cursores un cursor
sobre el maestro y en ese loop llamo a otro "cursor"
pero de el select de los substrings del de novedades y
de alli llamo a todos mis algorithmos. son varios
fonetico
distancia
terminacion
comienzo
fts
..etc
no me quiero extender demasiado, la seguimos en otro
correo,
salu2

mdc

Yahoo! Encuentros.

Ahora encontrar pareja es mucho más fácil, probá el nuevo Yahoo! Encuentros http://yahoo.cupidovirtual.com/servlet/NewRegistration

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miranda Palomino, David Gerson 2008-02-20 12:48:55 VB.Net And PostgreSQL
Previous Message Rajiv Rajaian 2008-02-20 11:11:20 Re: How to create a new user with password in commandline with no prompt for password