java使用ApacheLucene索引大文件时,如何避免内存不足错误?
在IndexFiles.java的第195行,您将看到:
doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))));
这一行允许用户搜索文件内容。如果有人希望显示一个摘要以及匹配文件的名称(有点像谷歌搜索结果),你需要在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);
这段代码工作得很好,给了我搜索结果的摘要。但是,如果文件太大,索引文件就会被删除。java类在附加到StringBuilder()时抛出OutOfMemory错误。我该怎么解决这个问题
共 (0) 个答案