2009-10-29 18 views
11

¿Es posible buscar en rangos de fechas usando Lucene en Java? ¿Cómo creo consultas de búsqueda de Lucene basadas en campos de fechas y rangos de fechas? Por ejemplo:Buscando en rangos de fechas con Lucene en Java?

  • entre las fechas especificadas
  • antes de una fecha especificada
  • después de una fecha especificada
  • en las últimas 24 horas
  • en la última semana
  • en el último mes.

[Editar] Estoy usando Lucene 2.4.1 y mi sistema es realmente muy mal legado y probado así que me gustaría si es posible no tener que actualizar

+1

Sí es posible. Si necesita un código de muestra, lo encontraré solo para usted. Solo tiene que hacer un comentario en esta publicación. Eche un vistazo a Lucene en acción: puede encontrar la respuesta a esta pregunta y muchas otras también. –

Respuesta

18

Lucene (antes de la versión 2.9 de todos modos) solamente almacena valores de cadena y solo admite consultas de rango lexicográficas sobre esos datos. Por lo tanto, si desea almacenar datos de fecha/hora y consultas de rango performas, debe formatear explícitamente sus valores de datos/tiempo de manera que se ordenen lexicográficamente.

Por ejemplo, almacenar la fecha/horas como algo parecido a 2009-10-29T15:34:00, y entonces las búsquedas por rangos como [2009-10-29T15:00:00 TO 2009-10-29T16:00:00]

Como se ha señalado en otra parte, Lucene 2.9 finalmente introducido soporte para consultas de rango con los datos que no son cadenas, haciendo esto todo bastante más fácil.

+7

El uso del método 'DateTools.dateToString (date, Resolution.SECOND)' puede ayudarlo a producir cadenas de fechas en formato lucene, que es como '20110223220000', que significa' 2011-02-23 22: 00: 00'. – bekce