[英]How do I get around an out of memory error when indexing large files using Apache Lucene?
在IndexFiles.java的第195行,您将看到:
doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))));
该行允许用户搜索文件内容。 如果有人希望显示摘要以及匹配文件的名称(类似Google搜索结果),则需要在IndexFiles.java的第195行之后添加一些代码行,如下所示:
FileReader fr = new FileReader("/home/user1/largefile.txt");
Bufferedreader br = new BufferedReader(fr);
StringBuilder sb = new StringBuilder();
String line;
while ( (line = br.readLine()) != null){
sb.append(line);
}
Field contentField = new StringField("content", sb.toString(), Field.Store.YES, Field.Index.ANALYZED);
doc.add(contentField);
但是我还没有完成,我需要使用Lucene的Highlighter类,并在SearchFiles.java的第184行之后添加代码。 更具体而言,例如:
Document doc = searcher.doc(hits[i].doc);
String text = doc.getField("content");
highlighter = new Highlighter(new QueryScorer());
String summary = highlighter.getBestFragment(analyzer, "content", text);
该代码可以完美地工作,并为我提供搜索结果的摘要。 但是,如果文件太大,则在附加到StringBuilder()时,IndexFiles.java类会吐出OutOfMemeory错误。 我该如何解决?
问题是Java堆已用尽,默认情况下,最大Java堆大小为64MB,但是您可以使用选项Xmx来增加它,即-Xmx1g,它会将最大堆大小增加到1GB,并考虑到堆不能超过RAM的大小。
如果您想了解更多,请查看以下内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.