gpt4 book ai didi

java - 使用 Apache Lucene 索引大文件时如何解决内存不足错误?

转载 作者:行者123 更新时间:2023-12-01 12:04:55 24 4
gpt4 key购买 nike

位于 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);

这段代码运行良好,并为我提供了搜索结果的摘要。但是,如果文件太大,IndexFiles.java 类在附加到 StringBuilder() 时会发出 OutOfMemeory 错误。我该如何解决这个问题?

最佳答案

问题是 java 堆已耗尽,默认情况下最大 java 堆大小为 64MB,但您可以使用选项 Xmx 来增加它,即 -Xmx1g 将最大堆大小增加到 1GB,考虑到该量堆的内存不能超过 RAM 的大小。

如果您想了解更多信息,请查看以下内容:

-X Command-line Options

How is the default java heap size determined?

关于java - 使用 Apache Lucene 索引大文件时如何解决内存不足错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com