2010-12-02 30 views
5

Soy nuevo en lucene. Tengo que indexar el campo de fecha. estoy usando siguiente IndexWriter constructor en lucene 3.0.0.Cómo indexar campo de fecha en lucene

IndexWriter writer = new IndexWriter(FSDirectory.open(indexDir), new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED) 

mi punto es: ¿Por qué que necesita un analizador cuando no se analizan los campos de fecha, mientras que la indexación Solía ​​Field.Index.NOT_ANALYZED.

Respuesta

10

Puede almacenar campo de la fecha de esta manera ..

Document doc = new Document(); 
doc.add(new Field("modified", 
     DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE), 
     Field.Store.YES, Field.Index.NOT_ANALYZED)); 

donde f es un objeto de archivo ...

Ahora utilice el documento anteriormente para IndexWriter ...

la caja del El código de muestra viene con lucene ... y el siguiente enlace ... http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/document/DateTools.html

ACTUALIZACIÓN

Field.Index NOT_ANALYZED

Índice de valor del campo sin necesidad de utilizar un analizador , por lo que se puede buscar. Como no se utiliza ningún analizador, el valor será almacenado como un único término. Esto es útil para Ids únicos como el número de producto .

Según javadoc Lucene no es necesario para el analizador de campos utilizando Field.Index NOT_ANALYZED pero creo que por el diseño del IndexWriter espera un analizador como la indexación de la réplica exacta de los datos no es eficiente en términos de almacenamiento y búsqueda.

+0

Utilicé el mismo documento que mencioné para la indexación, pero mi punto es por qué necesito un analizador en el objeto Indexwriter mientras estoy usando Field.Index.Not_Analyzed – Romi

+0

@Romi: compruebe la respuesta actualizada. Además, como consejo adicional, si está pensando simplemente en indexar un solo campo, entonces usar una base de datos incrustada como hsqldb o sqlite sería una opción mucho mejor. – Favonius

Cuestiones relacionadas