我用lucene做索引用,因为文件比较多有1600个pdf文件,大约有总大小有1.56G,可是每当索引到300多个文件时也就是大约.cfs文件为344M大小的时候,就出现这个问题:
2008-7-1 13:18:40 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet SearchController threw exception
java.lang.OutOfMemoryError: Java heap space
使用的电脑是2G内存,indexWriter的三个参数采用的是默认设置,我试了三次每次都是在cfs文件在344M的时候出这个问题,这是我写的循环有什么问题
try
{
Directory fsDirectory = FSDirectory.getDirectory(indexDir, true);
MMAnalyzer analyzer = new MMAnalyzer();
indexWriter = new IndexWriter(fsDirectory, analyzer, true);
LinkedList <File> list = new LinkedList <File>();
File file[] = dir.listFiles();
for (int i = 0; i < file.length; i++)
{
if (file[i].isDirectory())
list.add(file[i]);
else
{
if (file[i].getName().indexOf(type) != -1)
{
Document doc = getDocument(file[i], indexDir);
System.out.println("正在建立索引 : " + file[i] + "");
indexWriter.addDocument(doc);
}
// System.out.println("索引建立完毕!");
}
}
File tmp;
while (!list.isEmpty())
{
tmp = list.removeFirst();
if (tmp.isDirectory())
{
file = tmp.listFiles();
if (file == null)
continue;
for (int i = 0; i < file.length; i++)
{
if (file[i].isDirectory())
list.add(file[i]);
else
{
if (file[i].getName().indexOf(type) != -1)
{
Document doc = getDocument(file[i], indexDir);
System.out.println("正在建立索引 : " + file[i] + "");
indexWriter.addDocument(doc);
}
// System.out.println("索引建立完毕!");
}
}
}
else
{
System.out.println(tmp.getAbsolutePath());
}
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
indexWriter.optimize();
indexWriter.close();
indexWriter=null;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.gc();
}
return true;
}
还有是SearchController的问题吗?这个是SearchController文件:
public class SearchController extends HttpServlet
{ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) {
try
{
String searchWord = request.getParameter("searchWord");
String patentsearch = request.getParameter("search");
String searchtype = request.getParameter("searchtype");
SearchManager searchManager = new SearchManager(searchWord, patentsearch, searchtype);
List<SearchResultBean> searchResult = null;
searchResult = searchManager.search();
RequestDispatcher dispatcher = request.getRequestDispatcher("search.jsp");
request.setAttribute("searchResult", searchResult);
dispatcher.forward(request, response);
}
catch (ServletException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
doPost(request, response);
}
}
2008-7-1 13:18:40 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet SearchController threw exception
java.lang.OutOfMemoryError: Java heap space
使用的电脑是2G内存,indexWriter的三个参数采用的是默认设置,我试了三次每次都是在cfs文件在344M的时候出这个问题,这是我写的循环有什么问题
try
{
Directory fsDirectory = FSDirectory.getDirectory(indexDir, true);
MMAnalyzer analyzer = new MMAnalyzer();
indexWriter = new IndexWriter(fsDirectory, analyzer, true);
LinkedList <File> list = new LinkedList <File>();
File file[] = dir.listFiles();
for (int i = 0; i < file.length; i++)
{
if (file[i].isDirectory())
list.add(file[i]);
else
{
if (file[i].getName().indexOf(type) != -1)
{
Document doc = getDocument(file[i], indexDir);
System.out.println("正在建立索引 : " + file[i] + "");
indexWriter.addDocument(doc);
}
// System.out.println("索引建立完毕!");
}
}
File tmp;
while (!list.isEmpty())
{
tmp = list.removeFirst();
if (tmp.isDirectory())
{
file = tmp.listFiles();
if (file == null)
continue;
for (int i = 0; i < file.length; i++)
{
if (file[i].isDirectory())
list.add(file[i]);
else
{
if (file[i].getName().indexOf(type) != -1)
{
Document doc = getDocument(file[i], indexDir);
System.out.println("正在建立索引 : " + file[i] + "");
indexWriter.addDocument(doc);
}
// System.out.println("索引建立完毕!");
}
}
}
else
{
System.out.println(tmp.getAbsolutePath());
}
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
indexWriter.optimize();
indexWriter.close();
indexWriter=null;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.gc();
}
return true;
}
还有是SearchController的问题吗?这个是SearchController文件:
public class SearchController extends HttpServlet
{ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) {
try
{
String searchWord = request.getParameter("searchWord");
String patentsearch = request.getParameter("search");
String searchtype = request.getParameter("searchtype");
SearchManager searchManager = new SearchManager(searchWord, patentsearch, searchtype);
List<SearchResultBean> searchResult = null;
searchResult = searchManager.search();
RequestDispatcher dispatcher = request.getRequestDispatcher("search.jsp");
request.setAttribute("searchResult", searchResult);
dispatcher.forward(request, response);
}
catch (ServletException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
doPost(request, response);
}
}
解决方案 »
- HTTP Status 404 - Servlet TestJSP is not available
- ----60分求解决菜鸟问题。----
- 请高手指教,为什么联不上数据库?谢谢
- (在线等待)请教一个关于hibernate的问题:javax.servlet.ServletException: Not able to obtain connection
- 小问题!!关于haspMap的---在线等
- 表单提交上传文件前的验证
- 寻求网站“同学录”的源代码,有高分相送
- javamail的问题,也许很简单(在线)
- div 新手问题
- 索引用法遇到问题, 求大家帮忙解决一下!
- 再问“JSF改变密码框中的星号显示”寻具体解决办法
- Struts2+Spring+Hibernate出现There is no Action mapped for namespace / and action name validlogin 的错误
楼主【zhuyedeqingqing】截止到2008-07-06 14:26:21的历史汇总数据(不包括此帖):
发帖的总数量:7 发帖的总分数:300
结贴的总数量:4 结贴的总分数:240
无满意结贴数:0 无满意结贴分:0
未结的帖子数:3 未结的总分数:60
结贴的百分比:57.14 % 结分的百分比:80.00 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
把1600个文件分成10组,每次索引160个,外部循环。记得,每次做完要关闭Index.如果还不行,我也没办法了。这么大的文件,没遇到过。