我想從使用Apache Tika的PDF文件中提取文本內容,然後將數據傳遞給Lucene進行索引。 )爲Lucene索引提取PDF文本的有效方法
public static String extract(File file) throws IOException, SAXException, TikaException {
InputStream input = new FileInputStream(file);
ContentHandler handler = new BodyContentHandler(-1);
Metadata metadata = new Metadata();
new PDFParser().parse(input, handler, metadata, new ParseContext());
String plainText = handler.toString();
input.close();
return plainText;
}
我查詢相關的呼叫
handler.toString(;
現在我們使用多個線程(4到8,可由用戶配置)執行提取過程。那麼是否有其他方法可以獲得我們可以用於索引目的的Lucene的流。原因是我感到巨大的絃樂會推動更大的堆。
目前,如果完成的指標爲:
doc.add(new TextField(fieldName, ExtractPdf.extract(file), Field.Store.NO));
我們需要從50KB提取和指數約500K不同大小的文件,50MB。
感謝詳細的解答。假設我需要索引或解析文件的全部內容,這是正確的。我也實現了線程來加快速度。我需要檢查塊選項,因爲這看起來很有趣。 GC正在觸發並正在執行清理,但我的實際意圖是減少堆使用中的尖峯數量。在測試場景下,我的堆使用率高達1 GB,但在所有索引過程完成後,實際使用量可能爲20 MB。我會檢查塊的方法並確認。如果解決,將標記爲答案 – Soumya