Anotacion JPA para generar atributos como indices

236 views
Skip to first unread message

Leandro Spadaro

unread,
Oct 28, 2009, 9:41:48 PM10/28/09
to Grupo Java BS AS, (Grupo Java Google) Lista, Grupo Java Mexico Java
Buenas,
 
Quería consultar sobre un problema que estoy teniendo con una aplicación que paso a comentar.
 
Resulta que la aplicación tiene un buscador de productos internamete hace un like en tres campos de la base de datos para ver si encuentra la palabra que el usuario coloco o si forma parte de alguna palabra dentro de las existente en la base de datos.
El problema que tengo es que son muchos registros unos 60.000 por lo cual la busqueda se hace muy lenta.
 
Lo que pense es que esos tres campos fueran indices para acelerar la busqueda, lo que no se si existe una anotación
en JPA que permita marcar un atributo para que sea indice. Sino lo hago desde el administrador de MySql.
 
Si alguien se le ocurre otra idea la escuchare con mucho gusto.
 
saludos
Leandro 


Windows 7: encontrá el equipo adecuado para vos. Obtené más información.

Jorge Handl

unread,
Oct 29, 2009, 7:04:07 AM10/29/09
to jav...@googlegroups.com
hounder.org

2009/10/28 Leandro Spadaro <leo_s...@hotmail.com>

Calabaza

unread,
Oct 29, 2009, 7:36:20 AM10/29/09
to jav...@googlegroups.com
El 28 de octubre de 2009 22:41, Leandro Spadaro
<leo_s...@hotmail.com> escribió:

>
> Buenas,
>
> Quería consultar sobre un problema que
> estoy teniendo con una aplicación que paso a comentar.
>
> Resulta que la aplicación tiene un buscador
> de productos internamete hace un like en tres campos
> de la base de datos para ver si encuentra la palabra
> que el usuario coloco o si forma parte de alguna palabra
> dentro de las existente en la base de datos.

> El problema que tengo es que son muchos registros unos 60.000
> por lo cual la busqueda se hace muy lenta.

> Lo que pense es que esos tres campos fueran indices
> para acelerar la busqueda,

> lo que no se si existe una anotación
> en JPA que permita marcar un atributo para que sea indice.

> Sino lo hago desde el administrador de MySql.

Creo que esto es lo mejor para que el planificador
seleccione automáticamente cuál indice utilizar.

Obs: Te pidiría que por favor no hagas crossposting [0]
porque yo también estoy suscripto a las otras listas y recibo
el mismo mensaje 3 veces. Desde ya muchas gracias.

Un abrazo,

[0] http://es.wikipedia.org/wiki/Crossposting
--
§~^Calabaza^~§ from Villa Elisa, Paraguay
http://calablogbaza.blogspot.com/

http://es.wikipedia.org/wiki/Top-posting
http://es.wikipedia.org/wiki/Netiquette

Pablo Saavedra

unread,
Oct 29, 2009, 8:26:00 AM10/29/09
to jav...@googlegroups.com
Usa Lucene/Compass para crear un indice de texto de tu DB y hace la búsqueda ahí. Te vas a sorprender con la diferencia de velocidad.

Saludos.

2009/10/28 Leandro Spadaro <leo_s...@hotmail.com>

Pablo Ruggia

unread,
Oct 29, 2009, 8:35:20 AM10/29/09
to jav...@googlegroups.com
Tenes dos opciones:

* Una es como dijo Pablo Saavedra, usa Lucene que se dedica a eso especificamente, eso es lo optimo pero te va a llevar un rato por ahi aprender a usarlo, es facil, pero tiene sus trucos para que funcione bien.

* La otra que es un poco mas facil es usar full text search de mysql. Lo que haces es crear una tabla myisam con campos de tipo FULLTEXT y despues haces una query especial que creo que se llama MATCH, donde le pones que campos matchear contra que terminos. Eso te va a andar super rapido y es super facil de usar. El unico problema es que no vas a tener toda la flexibilidad y poder que te da lucene.

2009/10/29 Pablo Saavedra <pablo.a....@gmail.com>

Jorge Handl

unread,
Oct 29, 2009, 9:17:23 AM10/29/09
to jav...@googlegroups.com
Yo se que mi post fue breve, pero hay una tercera opción: http://hounder.org
También es open-source, está basado en Lucene y lo usan sitios como wordpress.com y clarin.com.
... y yo soy quien da soporte.

2009/10/29 Pablo Ruggia <pru...@gmail.com>

Leandro Spadaro

unread,
Mar 11, 2013, 4:29:35 PM3/11/13
to (Grupo Java Google) Lista, Grupo Java BS AS, Grupo Java Mexico Java
En el foro pregunte sobre el tema de como crear índices desde JPA, hoy estaba mirando un post donde
se da un buen detalle. Se los dejo para que den una mirada por si interesa el tema. Además se explica
el cache de JPA.


Saludos.
Leandro.


To: ServerJa...@yahoogrupos.com.mx
From: joseb...@yahoo.es
Date: Tue, 3 Nov 2009 18:45:55 +0000
Subject: Re: [JavaEnEspañol] Anotacion JPA para generar atributos como indices

 

  Hibernate Search es un wrapper para Lucene como bien comentas Toño, solo que como dice el titulo del Post lo que buscaba es una alternativa para usar con JPA, la ventaja es que reduce la curva de aprendizaje de Lucene. Por otra parte en mi experiencia Lucene lo utilice para indexar contenido de documentos y la actualización de indices no era muy rápida, eso también era debido al tamañano de los archivos, cosa que con los registros seguramente no deberia ocurrir, ya que bien pones de ejemplo a Zimbra. Por otra parte la opción de irse por los Indices FullText de MySql tienen el menor impacto en el desarrollo y sigue la misma logica pero el performance no le llega al que tiene Apache Lucene "http://jayant7k.blogspot.com/2006/05/mysql-fulltext-search-versus-lucene.html", aunque con los volúmenes que se estan manejando no creo que la diferencia sea muy notoria, otra muy buena ventaja que pones sobre la mesa sobre una solución usando Lucene es que seria portable y agnóstica a la base de datos.


Saludos


De: Antonio Varela <unixlibre@gmail.com>
Para: ServerJavaMexico@yahoogrupos.com.mx
Enviado: dom, noviembre 1, 2009 1:11:19 PM
Asunto: Re: [JavaEnEspañol] Anotacion JPA para generar atributos como indices

 
Hibernate Search es Lucene pero con anotaciones. En lugar de delcarar Fields y luego agregarlos a un Document, declaras propiedades de una clase como @Indexable y cosas así, es un poco mas simple el manejo. Lo de indexar constantemente no es tanto problema, es cuestión de agregar el código necesario en donde hagas tu manipulación de datos. Zimbra indexa los buzones de los usuarios (utiliza Lucene) sin problemas de performace que mencionas (al guardar, recuperar o buscar información): se ocupa expacio en disco adicional, pero las consultas son tan rápidas como contra una base de datos. Los índices Full-Text en general utilizan el mismo principio de análisis de información, indexación y búsquedas, o sea que estamos hablando de lo mismo, con la salvedad de que cada mecanismo implementa su propio lenguaje de consulta,

Lo que no mencioné es los índices Full-Text de MySQL solo funcionan con tablas MyISAM, la verdad ignoro si esto ya cambió. En mi caso fue una de las razones por las cuales decidimos utilizar Lucene para indexar el contenido de los registros de la base de datos (hacerlo de una manera portable); y que dicho sea de paso es otra ventaja: Lucene te permite indexar documentos (archivos e info) que no existen en una base de datos.

Saludos,
--
Antonio Varela
unixlibre@gmail. com




¡Encuentra las mejores recetas
con Yahoo! Cocina!
http://mx.mujer.yahoo.com/cocina/

__._,_.___
---------------------------------------------------------------
Para suspender temporal o definitivamente el que se le envien correos, visite:
http://mx.groups.yahoo.com/group/ServerJavaMexico/join
ahi tambien podrá modificar sus preferencias para recibir unicamente un resumen diario de los correos.

Gracias por participar en el grupo
==================================
Para visitar este grupo en Internet, ve a:
     http://mx.groups.yahoo.com/group/ServerJavaMexico/

<*> Para cancelar tu suscripción a este grupo, envía un mensaje a:
     ServerJavaMexi...@yahoogrupos.com.mx

<*> El uso de Yahoo! Grupos está sujeto a los:
     http://mx.yahoo.com/docs/info/utos.html



Actividad reciente
Visita tu grupo
Y! Respuestas
Pregunta

Gente real te

responde

Yahoo! Messenger
Mensajero perfecto

Llama de PC a PC

sin costo alguno

Barra Yahoo!
Todo a un clic

Acceso rápido a

servicios Yahoo!

.

__,_._,___
Reply all
Reply to author
Forward
0 new messages