2010-12-02 5 views
5

Je suis nouveau à lucene. Je dois indexer le champ de date. J'utilise le constructeur suivant IndexWriter dans lucene 3.0.0.Comment indexer le champ date dans lucene

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

mon point est: Pourquoi il a besoin d'un analyseur lorsque les champs de date ne sont pas analysés, alors que l'indexation je Field.Index.NOT_ANALYZED.

Répondre

10

Vous pouvez stocker champ de date de cette façon ..

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

où f est un objet fichier ...

utiliser maintenant le document ci-dessus pour indexwriter ...

la caisse exemple de code est livré avec Lucene ... et le lien suivant ... http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/document/DateTools.html

MISE à JOUR

Field.Index NOT_ANALYZED

Indice de valeur du champ sans utiliser un analyseur, il peut donc être recherchée. Comme aucun analyseur n'est utilisé, la valeur sera stockée en tant que terme unique. Ceci est utile pour les ID uniques comme les numéros de produit .

Comme par Lucene javadoc vous n'avez pas besoin analyseur pour les champs à l'aide Field.Index NOT_ANALYZED mais je pense que par la conception du IndexWriter attend un analyseur comme l'indexation de la réplique exacte des données ne sont pas efficaces en termes de stockage et de recherche.

+0

J'ai utilisé le même document que vous avez mentionné pour l'indexation, mais mon point est pourquoi j'ai besoin d'un analyseur dans l'objet Indexwriter pendant que j'utilise Field.Index.Not_Analyzed – Romi

+0

@Romi: s'il vous plaît vérifier la réponse mise à jour. En outre, à titre indicatif, si vous envisagez d'indexer un seul champ, alors utiliser une base de données intégrée comme hsqldb ou sqlite serait une bien meilleure option. – Favonius

Questions connexes