运行环境 tomcat + eclipse + lucene 1.9
首先看 SearchController 的类  //
public class SearchController extends HttpServlet{
    
private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response)
                      throws IOException, ServletException{
     String searchWord =(String)request.getParameter("searchWord");
     SearchManager searchManager = new SearchManager(searchWord);
     List searchResult = null;
     searchResult = searchManager.search();
      RequestDispatcher dispatcher = request.getRequestDispatcher("search.jsp");
        request.setAttribute("searchResult",searchResult);
      dispatcher.forward(request, response);
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                     throws IOException, ServletException{
        doPost(request, response);
    }   
}
SearchManager 类
public class SearchManager {
    private String searchWord;
    private IndexManager indexManager ;
    private Analyzer analyzer ;
    
    public SearchManager(String searchWord){
     this.searchWord   =  searchWord;
     this.indexManager =  new IndexManager();
     this.analyzer     =  new StandardAnalyzer();
    }
    public List search(){
     List searchResult = new ArrayList();
     if(false == indexManager.ifIndexExist()){
     try {
if(false == indexManager.createIndex()){
return searchResult;
}
} catch (IOException e) {
e.printStackTrace();
return searchResult;
}
     }
    
     IndexSearcher indexSearcher = null;
    
     try{
     indexSearcher = new IndexSearcher(indexManager.getIndexDir());
     }catch(IOException ioe){
     ioe.printStackTrace();
     }
        
     QueryParser queryParser = new QueryParser("content",analyzer);
     Query query = null;
     try {
query = queryParser.parse(searchWord);
} catch (ParseException e) {
e.printStackTrace();
}
if(null != query && null != indexSearcher){
try {
Hits hits = indexSearcher.search(query);
for(int i = 0; i < hits.length(); i ++){
SearchResultBean resultBean = new SearchResultBean(); resultBean.setHtmlPath(hits.doc(i).get("path")); resultBean.setHtmlTitle(hits.doc(i).get("title")); searchResult.add(resultBean);
}
} catch (IOException e) {
e.printStackTrace();
}
}
     return searchResult;
    }    
}IndexManager 类
public class IndexManager {

//the directory that stores html files
    private final String dataDir  = "c:\\dataDir";
    
    //the directory that is used to store lucene index
    private final String indexDir = "c:\\indexDir";
    
    /**
     * create index
     */
    public boolean createIndex() throws IOException{
     if(true == ifIndexExist()){
         return true;
     }
     File dir = new File(dataDir);
     if(!dir.exists()){
     return false;
     }
     File[] htmls = dir.listFiles();
     Directory fsDirectory = FSDirectory.getDirectory(indexDir, true);
     Analyzer  analyzer = new StandardAnalyzer();
     IndexWriter indexWriter = new IndexWriter("c:\\indexDir", analyzer, true);
     for(int i = 0; i < htmls.length; i++){
     String htmlPath = htmls[i].getAbsolutePath();
    
     if(htmlPath.endsWith(".html") || htmlPath.endsWith(".htm")){
         addDocument(htmlPath, indexWriter);
     }
     }
     indexWriter.optimize();
     indexWriter.close();
     return true;
    
    }
    public void addDocument(String htmlPath, IndexWriter indexWriter){
     HTMLDocParser htmlParser = new HTMLDocParser(htmlPath);
     String path    = htmlParser.getPath();
     String title   = htmlParser.getTitle();
     Reader content = htmlParser.getContent();    
     Document document = new Document();
     document.add(new Field("path",path,Field.Store.YES,Field.Index.NO));
     document.add(new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED));
     document.add(new Field("content",content));
     try {
indexWriter.addDocument(document);
} catch (IOException e) {
e.printStackTrace();
}
    }
    public boolean ifIndexExist(){
        File directory = new File(indexDir);
        if(0 < directory.listFiles().length){
         return true;
        }else{
         return false;
        }
    }    
    public String getDataDir(){
     return this.dataDir;
    }    
    public String getIndexDir(){
     return this.indexDir;
    }
报这HTTP Status 500 - java.lang.NoClassDefFoundError: org/apache/lucene/queryParser/ParseException
sample.dw.paper.lucene.servlet.SearchController.doPost(SearchController.java:23)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)这个程序整了N天了,也没整明白。关于这lucene程序真是不会整。。

解决方案 »

  1.   

    org.apache.lucene.queryParser,少了这个类
      

  2.   

    就是说:你的QueryParser这个实例在创建的时候就已经出错了,被抛出了异常;
    我在低版本的时候用过,1.9的版本没有用过,我建议你写 Query query = QueryParser.parse(searchWord, "content", analyzer) 而代替现在你现有的代码,试验一下!
      

  3.   

    你的问题解决了吗?
    我也遇到同样的问题,后来发现是web.xml中<display-name></display-name>没有将web应用的名称改过来,你只要改为<display-name>你的工程名</display-name>就可以了。
      

  4.   

    我也遇到这个问题,安楼上的说法改了web.xml文件,但还是有问题,不知道楼上这位大哥还改什么