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に与えることができるストリームを得る他の方法があります。なぜなら、私は巨大なStringsがより大きなヒープを求めていると感じているからです。
現在、指標として行う場合:私たちは50メガバイトに50キロバイトから様々なサイズの約500Kの文書を抽出し、インデックスする必要が
doc.add(new TextField(fieldName, ExtractPdf.extract(file), Field.Store.NO));
。
感謝を集めていることに注意してください。ファイルの内容全体を索引付けまたは解析する必要があると想定するのは間違いありません。スレッドをより速くするために実装しました。私は非常に興味深いようにチャンクオプションをチェックする必要があります。 GCがトリガーされ、クリーンアップが適切に実行されていますが、私の実際の目的は、ヒープ使用量のスパイク数を減らすことです。テストシナリオでは、ヒープ使用量は1 GBまで増えますが、すべてのインデックス作成プロセスが完了した後で実際の使用量は20 MBになる可能性があります。チャンクのアプローチを確認して確認します。解決した場合は、これを回答としてマークします – Soumya