2012-09-17 19 views
5

Estoy usando http api para consultar ravendb (por lo que una consulta LINQ no es la solución a mi pregunta). Mi documento del producto se ve así:¿Cómo se consulta un índice ravendb que contiene fechas usando Lucene?

{ 
    "editDate": "2012-08-29T15:00:00.846Z" 
} 

y tengo el índice:

from doc in docs.Product 
select new { doc.editDate } 

que desea consultar todos los documentos antes de una determinada fecha y hora. Puedo consultar en la fecha con esta sintaxis:

editDate: [NULL TO 2012-09-17] 

sin embargo no puedo averiguar cómo consultar el componente de tiempo también. Alguna idea?

Respuesta

5

Se pueden realizar consultas que el uso de:

editDate: [NULL TO 2012-09-17T15:00:00.846Z] 

Si usted cuida de una parte de eso, utilice:

editDate: [NULL TO 2012-09-17T15:00] 

Tenga en cuenta que puede que tenga que escapar partes de la consulta, así:

editDate: [NULL TO 2012\-09\-17T15\:00] 

Para que esto que funciona también necesita asegurarse de que el campo sea analizado. En Raven Studio - Agregar campo -> editDate, y establecer Indexing to Analyzed.

+0

Sí, necesita ser escapado, sin embargo, esto todavía no funcionó para mí. Si el día es mayor (2012-09-18T15: 00), se encontrará el documento; sin embargo, si es el mismo día pero más tarde en el día (2012-09-17T15: 30), no se encuentra el documento. –

+0

Lo descubrimos: necesitamos analizar el campo, ¿cómo se configura esto usando la api http? (No pude encontrarlo en los documentos) –

+0

Este es un mal consejo. Los campos de fecha nunca deben analizarse. –

-1

Una forma de solucionar este problema es almacenar el valor no como una fecha sino como el número de segundos desde la época de Unix.

Esto da como resultado un número que puede comparar con facilidad.

estoy usando javascript y el momento JS biblioteca:

{ 
    "editDate": "2012-08-29T15:00:00.846Z", 
    "editDateUnix": moment("2012-08-29T15:00:00.846Z").unix() 
} 

Cualquier mi índice:

from doc in docs.Product 
select new { doc.editDate, doc.editDateUnix } 

y mi Lucene consulta:

"editDate: [NULL TO "+moment("2012-09-17").unix()+"]" 
+0

¿Esto resuelve su problema o está buscando más respuestas? – MattDavey

+0

Lo resuelve, sin embargo, si hay otra manera de hacerlo, ¡me encantaría saber de qué se trata! –

Cuestiones relacionadas