Re[4]: tsearch2 vs. like

From: Ever Daniel Barreto Rojas <ebarreto(at)nexusit(dot)com(dot)py>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re[4]: tsearch2 vs. like
Date: 2008-02-20 14:45:30
Message-ID: 1253577522.20080220104530@nexusit.com.py
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

josé:

El 20/02/2008 a las 04:48 a.m., escribiste:
>> yo me enfrenté al mismo problema, tengo una tabla con aprox. 5
>> millones de registros de nombres de personas, y necesitaba realizar
>> búsquedas de la forma que mencionas y eran muy lentas, aunque las
>> búsquedas del tipo 'XX%' si eran rápidas (gracias a algunos
>> consejos que me dio álvaro, puedes verlos en el histórico de la
>> lista)
>> básicamente, mi problema pude resolverlo usando tsearch, ya que el
>> objetivo era (y es) buscar nombres de personas, en mi escenario, en
>> un 90% de los casos se necesitan buscar nombres que contienen por
>> ejemplo "EVER" y "BARRETO" y "ROJAS", y las búsquedas que necesiten
>> nombres que empiecen por "EVER" o "BARRET%" eran MUY pocas, y para
>> las búsquedas del tipo %XXX% que en mi caso eran búsquedas del tipo
>> nombres que contengan EVER y BARRETO lo solucioné con el tsearch
> ¿Serías tan amable de indicarme qué diccionario y configuración usas
> (simple, default ...)?
> ¿Cómo escribes las búsquedas? En las pruebas que he realizado nunca he
> conseguido con tsearch (nombre @@ to_tsquery('xxx')) los mismos
> resultados que con like '%xxx%'. Parece que tsearch sólo devuelve
> nombres que empiecen por 'xxx%' o que contienen 'xxx' como palabra
> completa dentro del texto.
> Por ejemplo,
> * una consulta con tsearch: nombre_empresa @@ to_tsquery('ALUM'), me
> devuelve 9 registros como
> ALUMINIOS HERNANSANZ, S.L.
> TEXFIL GANDUXER ALUM, S.A.
> * una consulta con like '%ALUM%' me devuelve 272 registros como
> APLICACIONES DEL ALUMINIO, S.A. (ADASA)
> HISPANO AMERICANA DEL ALUMBRADO, S.A.

el diccionario que utilizo es el default, y las búsquedas las
escribo de esta forma:

SELECT *
FROM tu-tabla
WHERE campo_tsvector @@ to_tsquery('default',
'ALUMINIOS&HERNANSANZ')

como te decía, si necesitas buscar nombres parciales creo que vas a
necesitar usar el LIKE, pero si quieres buscar con nombres
completos con el tsearch te manejas sin problemas

de nuevo, si es busqueda parcial creo que vas a necesitar LIKE (y
puedes ver en el blog de depesz como mejorar el tiempo de la
consulta) y si es completo (es decir nombres completos) entonces
tsearch2 es viable

Cordiales saludos,

-------------------
Ever Daniel Barreto Rojas
e.mail: ebarreto(at)nexusit(dot)com(dot)py :: Nexus Information Technologies
web: www.nexusit.com.py
20/02/2008 10:37 a.m.

---------------------
"Find a bug in a program, and fix it, and the
program will work today. Show the program how
to find and fix a bug, and the program
will work forever"
- Oliver Silfridge
---------------------

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-02-20 15:03:32 Re: Configuración regional LC_CTYPE
Previous Message Gilberto Castillo Martínez 2008-02-20 14:18:03 Sobre el pgAdmin