search函数返回一个二维数组,出错提示如下:org.apache.jasper.JasperException: An exception occurred processing JSP page /result.jsp at line 256253:  out.println("</p>");
254: 
255:  ExtractDigest testResult=new ExtractDigest();    //鎼滅储鏂囨。
256:  String[][] str=testResult.search("contents","it");
257: 
258:  out.print(str.length);
259:  /*out.print("<p class=rf>鎼滅储缁撴灉锛�/p>");
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:515)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:408)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
org.apache.jsp.result_jsp._jspService(result_jsp.java:364)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause java.lang.OutOfMemoryError: Java heap space
net.teamhot.thesaurus.TreeNode.<init>(TreeNode.java:46)
net.teamhot.thesaurus.WordTree.addChineseWord(WordTree.java:75)
net.teamhot.thesaurus.WordTreeFactory.buildChineseWordTree(WordTreeFactory.java:63)
net.teamhot.thesaurus.WordTreeFactory.getInstance(WordTreeFactory.java:43)
net.teamhot.lucene.ThesaurusTokenizer.next(ThesaurusTokenizer.java:82)
org.apache.lucene.queryParser.QueryParser.getFieldQuery(QueryParser.java:437)
org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1092)
org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:979)
org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:907)
org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:896)
org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:146)
luence.ExtractDigest.search(ExtractDigest.java:55)
org.apache.jsp.result_jsp._jspService(result_jsp.java:321)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

解决方案 »

  1.   

    我直接在java文件里运行相同参数,不会产生死循
      

  2.   

    在函数search里头,返回的数组下标限制为100
      

  3.   

    这里贴出search函数:
    public String[][] search(String keyword) throws CorruptIndexException, IOException, ParseException{
    String[][] str = new String[100][3];
    int hlh=100;
       searcher = new IndexSearcher(indexPath); 
       QueryParser queryParse = new QueryParser("contents", analyzer); 
       Query query = queryParse.parse(keyword); 
       Hits hits = searcher.search(query);
       if(hits.length()==0) { 
        System.out.print("找不到");
        str[0][1]="对不起,找不到你";
        return str;
       }
       if(hits.length()<100) hlh=hits.length();
       for(int i=0;i<hlh;i++){
        System.out.println("length="+hits.length());
        Document doc = hits.doc(i);
       String text = doc.get("contents");
       //System.out.println("||||||||||||"+text);
        int htmlLength = prefixHTML.length()+suffixHTML.length();
        System.out.println("高亮HTML的总长度为"+htmlLength); 
        SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(prefixHTML, suffixHTML);    
                Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));    
                String highLightText = highlighter.getBestFragment(analyzer,"contents",text);
                //System.out.println("★高亮显示第 "+(i+1) +" 条检索结果如下所示:"); 
               // System.out.println("highLightText="+highLightText);             
                // System.out.print(doc.get("path"));
                 str[i][1]=doc.get("path");
                 str[i][1]=str[i][1].substring(13,str[i][1].length());
                 str[i][1]=str[i][1].substring(0,str[i][1].lastIndexOf("."))+".pdf";
                 str[i][2]=highLightText;
               // System.out.println("显示第 "+(i+1) +" 条检索结果摘要的长度为(含高亮HTML代码):"+highLightText.length()); 
       }
       searcher.close();
       for(int i=0;i<str.length;i++) {
        System.out.println("[1]="+str[i][1]);
        System.out.println("[2]="+str[i][2]);
       }
       
       return str;
    }
      

  4.   

    二维数组不能这样赋值,
    不如用hashmap
      

  5.   

    最后是设了tomcat的虚拟内存解决了