2010-12-02 10 views
5

luceneを初めて使用しています。私は、日付フィールドをインデックス化する必要があります。 私はlucene 3.0.0に次のIndexWriterコンストラクタを使用しています。luceneの日付フィールドのインデックス方法

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

私のポイントは次のとおりです。それは日付フィールドが分​​析されていないアナライザを必要とする理由 、私はField.Index.NOT_ANALYZEDを使用し、インデックスながら。

答えて

10

あなたは...この方法で

fはファイルオブジェクトです...

今すぐindexwriterについては、上記の文書を使用し

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

を日付フィールドを格納することができます...

チェックアウトサンプルコードにはlucene ...と次のリンクが付属しています... http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/document/DateTools.html

UPDATE

Field.Index NOT_ANALYZED

アナライザを使用せずにインデックスフィールドの値なので、検索することができます。 アナライザーが使用されていないため、値は になります。これは で、製品番号 のようなユニークなIDに便利です。

のLuceneのjavadocを1として、あなたはField.Index NOT_ANALYZEDを使用してフィールドの解析を必要としませんが、私はIndexWriterは、データの正確なレプリカをインデックスとしてアナライザは、ストレージおよび検索の面で効率的ではない見込んで設計によってだと思います。

+0

私は索引付けに関して同じ文書を使用しましたが、Field.Index.Not_Analyzedを使用している間はIndexwriterオブジェクトにアナライザーが必要です。 – Romi

+0

@Romi:更新された答えを確認してください。また、サイド・アドバイスとして、単一フィールドを索引付けすることを考えている場合は、hsqldbやsqliteなどの組み込みデータベースを使用する方がはるかに良いオプションになります。 – Favonius

関連する問題