2011-06-02 1 views
1

Luceneに読者やInputStreamを受け入れ、その内容を格納できるフィールドを作成する方法はありますか?ハイライト時に使用できるようにデータを保存したいので、ドキュメントのコンテンツが実際に大きくなる可能性があるため、データをストリーミングする必要があります。Luceneフィールドを格納して、読者にストリームしてもらう方法

リーダを使用できるフィールドのコンストラクタは表示されず、値を格納できます。 ありがとう

答えて

3

文書が大きすぎない場合は、まずメモリに読み込んでから、新しいフィールドを追加するときに結果の値を文字列として指定してください。ドキュメントが大きい場合は、それらを管理可能なチャンクに分割し、各チャンクで上記の操作を実行します。 Luceneがすべての値を検索するように、各チャンクに同じフィールド名を使用するようにしてください。

例:

IndexWriter writer = ... 
String id = ... 
String[] lines = ... 
Document doc = new Document(); 
doc.add(new Field("id", id, Store.YES, Index.NOT_ANALYZED, TermVector.NO); 
for (String line: lines) { 
    doc.add(new Field("text", line, Store.YES, Index.ANALYZED, TermVector.WITH_POSITIONS); 
} 
writer.addDocument(doc); 

のLuceneは自動的にプールされたセットの上に検索できるように、それぞれに指定された値は、同じフィールド名を追加マージします。

+0

しかし、キャッシュされたコピーを表示したいときや強調表示したいときに問題になることはありませんか?あなたは同じフィールド名を維持すると言うとき、それはどういう意味ですか?同じ "名前"を持つ複数のフィールドを作成し、ドキュメントに追加しますか? – Sap

+0

@sapan上記の答えにサンプルコードを追加しました。 –

+0

ありがとう、それは働いているようです。 – Sap

関連する問題