有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案