如何在多个部分中解析和索引大文件,以便在输入流中读取文件时可以消耗更少的内存?

时间:2015-06-11 10:51:30

标签: java parsing elasticsearch stream apache-tika

我正在使用Tika Apache Parserparse文件和elastic search来索引文件。

假设我有一个需要解析的doc文件。这是代码示例:

public String parseToPlainText() throws IOException, SAXException, TikaException {
    BodyContentHandler handler = new BodyContentHandler();

    InputStream stream = ContentHandlerExample.class.getResourceAsStream("test.doc");
    AutoDetectParser parser = new AutoDetectParser();
    Metadata metadata = new Metadata();
    try {
        parser.parse(stream, handler, metadata);
        return handler.toString();
    } finally {
        stream.close();
    }
}   

正如您所见,test.doc文件已在一段时间内被读取,如果文件大小太大,则可能导致outofmemoryerror。我需要能够读取input-streams的小文件中的文件,parser.parse(stream, handler, metadata);可以接受这些流块。我有另一个问题是该文件可以是任何类型。那么我怎样才能在chuck of streams中拆分文件,parser怎么能接受呢? 重要的是,每个文件都应该被索引为单个文件,甚至在索引时分成块,最后。

0 个答案:

没有答案