Tengo una consulta que está haciendo ILIKE en unos 11 campos de texto de cadena o texto de la tabla que no es grande (500 000), pero para ILIKE obviamente demasiado grande, la consulta de búsqueda tarda 20 segundos. La base de datos es postgres 8.4Hibernate Search, Lucene o cualquier otra alternativa?
Necesito implementar esta búsqueda para que sea mucho más rápido.
lo que vino a mi mente:
hice columna TVECTOR adicional montado a partir de todas las columnas que necesitan ser buscado, y creó el índice de texto completo en él. La búsqueda de texto completo fue bastante rápida. Pero ... No puedo mapear este tipo de TVECTOR en mi .hbms. Así que esta idea se cayó (en cualquier caso, la consideré más como una solución temporal).
Hibernate la búsqueda. (He oído hablar de ello por primera vez hoy) Parece prometedor, pero necesito una opinión con experiencia sobre él, ya que no quiero entrar en la API nueva, posiblemente no la más simple, para algo que podría hacerse más simple.
Lucene
En cualquier caso, esto ha sucedido ahora con esta tabla, pero me gustaría ser la solución más genérica y se aplica para casos futuros relacionados con las búsquedas de texto completo.
Todos los consejos apreciados!
Gracias
thanx para explicaciones, una pregunta más breve, quiero poder buscar en algunos campos de cadena. ¿Tiene sentido también almacenar todos los otros campos en el índice, pero no hacer búsquedas, y luego cuando he golpeado, obtengo el objeto a partir de ahí, o debería obtener el IDS e ir a la base de datos para obtenerlos? ? – Julia
@Julia Solo debe indexar los campos en los que desea buscar. Usted le dice a Hibernate Search qué es @DocumentId (también el @Id) de la entidad indexada. Hibernate usará esta identificación para obtener la entidad de la base de datos (o la memoria caché de la sesión) sin que usted se preocupe por ello. En efecto, Hibernate Search toma una cadena de búsqueda y le devuelve las entidades de dominio que coinciden con esa búsqueda. Neat ¿eh? –
bien hecho, gracias! – Julia