我想从使用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