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
---------------------
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 |