中文分词器问题

我做了一个lucene的中文分词器, 但是当把它替换到IndexHtml的StandardAnalyzer的时候
程序是可以跑了。
但是用tomcat6。0去查询结果时出现了这样的错误。


An error occurred at line: 18 in the generated java file
Only a type can be imported. analyzer.ChineseAnalyzer resolves to a package

An error occurred at line: 81 in the jsp file: /results.jsp
ChineseAnalyzer cannot be resolved to a type
78:                                                                       //query string so you get the
79:                                                                       //treatment
80:
81:                 Analyzer analyzer = new ChineseAnalyzer();           //construct our usual analyzer
82:                 try {
83:                         QueryParser qp = new QueryParser("contents", analyzer);
84:                         query = qp.parse(queryString); //parse the

 

在这里tomcat 的webapps\luceneweb里面的 result.jsp里添加了这两行

 

<%@ page language="java" contentType="text/html; charset=GBK" %>


<%@ page import = "  javax.servlet.*, javax.servlet.http.*, java.io.*, org.apache.lucene.analysis.*,org.apache.lucene.analysis.standard.StandardAnalyzer, org.apache.lucene.document.*, org.apache.lucene.index.*, org.apache.lucene.search.*, org.apache.lucene.queryParser.*, org.apache.lucene.demo.*, org.apache.lucene.demo.html.Entities, java.net.URLEncoder" %>


<%@ page import="analyzer.ChineseAnalyzer, init.* " %>


谢谢。。。


问题补充:
我想在这里在补充一点。。
我的系统是ubuntu。
还有我这里没有web-inf/classes, 只是在bin里面有class。
根据提示之前也做过,
尤其是想刚才那样analyzer.*之后报错就不一样了

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 81 in the jsp file: /results.jsp
ChineseAnalyzer cannot be resolved to a type
78:                                                                       //query string so you get the
79:                                                                       //treatment
80:
81:                 Analyzer analyzer = new ChineseAnalyzer();           //construct our usual analyzer
82:                 try {
83:                         QueryParser qp = new QueryParser("contents", analyzer);
84:                         query = qp.parse(queryString); //parse the

我的result.jsp  /tomcat/webapps/luceneweb/里
问题补充:
能详细的说明一下吗?
我的是lucene-core-2.1.0
我的分析器是这样的
项目里面一共有四个包:
src:
analyzer\ ChineseAnalyzer.java  ChineseTokenizer.java
init\ Dictionary.java Seperator.java, StopWord.java
org.apache.lucene.demo\IndexHTML.java
org.apache.lucene.demo.html<br />问题补充:
还是不能解决。
报错还是一样的。
问题补充:
我这个原本是在windows里面做过的
这个跟linux一样。
就是之前在用StandardAnalyzer的时候是可以的。
就是当该一个中文分析器后把tomCat里面的jsp需要改动一下
不过就在那里出现了问题。
我把范例上传。。。帮一下忙好吗?
问题补充:
回:jianghuidong

我的代码是这样的。
不过就是有上面的错误。

==========

if (error == false) {                                           //did we open the index?
                queryString = new String(request.getParameter("query").getBytes("iso8859-1"));           //get the search criteria
                startVal    = request.getParameter("startat");         //get the start index
                maxresults  = request.getParameter("maxresults");      //get max results per page
                try {
                        maxpage    = Integer.parseInt(maxresults);    //parse the max results first
                        startindex = Integer.parseInt(startVal);      //then the start index 
                } catch (Exception e) { } //we don't care if something happens we'll just start at 0
                                          //or end at 50

               

                if (queryString == null)
                        throw new ServletException("no query "+       //if you don't have a query then
                                                   "specified");      //you probably played on the
                                                                      //query string so you get the
                                                                      //treatment

                Analyzer analyzer = new ChineseAnalyzer();           //construct our usual analyzer
                try {
                        QueryParser qp = new QueryParser("contents", analyzer);
                        query = qp.parse(queryString); //parse the
                } catch (ParseException e) {                          //query and construct the Query
                                                                      //object
                                                                      //if it's just "operator error"
                                                                      //send them a nice error HTML
                                                                     
%>
                        <p>Error while parsing query: <%=escapeHTML(e.getMessage())%></p>
<%
                        error = true;                                 //don't bother with the rest of
                                                                      //the page
                }
        }
问题补充:
回jianghuidong

那个你写的代码是什么意思
问题补充:
回: iampurse

那个片段部署和手动发布是什么意思

analyzer\ ChineseAnalyzer.java ChineseTokenizer.java

你的jsp是不是可以找到org.apache.lucene.demo\IndexHTML.java这个类?如果可以的话,你试试把2个java文件放到这里编译成class。

然后再看看jsp能否调用得到

这种错误通常都是你的这个class不存在,或者是jsp import的路径错误导致无法找到。你应该确认一下,

有可能是这个class没有生成,一般在web-inf/classes下面。另外检查一下jsp import的路径对不对,是不是错了或者少了。

你的问题是包路径错误。系统在你给的路径下找不到类,建议楼主好好检查一下路径或者路径分隔符。

analyzer.ChineseAnalyzer

先改成analyzer.*试试看。

我怀疑是你的tomcat没有重新编译jsp,或者是analyzer.ChineseAnalyzer没有编译。你可以删除tomcat下面的work目录,然后重新访问jsp,让jsp重新生成,然后查看下在web-inf/classes里面是不是有ChineseAnalyzer这个class生成

那说明你的应该是class的路径错误。你可以试试将你的类放到lucene的代码包里面去,然后在jsp里面引用。

不好意思,我没有在linux下面做过java开发,不清楚linux下面这些java路径的具体设置,你的环境是否有其他的可以运行的范例?你可以参考下其他范例的路径设置。

或者说你可以下载一些开源项目,在linux下面可以运行的,然后参考下他们路径的设置跟写法的?

或者你是否身边同事可以问一下。。。

看下你的项目的 输出目录。

右键项目,属性。 buildPath 。
里头有个source,最下面是default output fold
把那个东西改成/WEB-INF/classes 。

然后看你是怎么发布的项目。

如果是片段部署的话,直接填进去就可以了。
如果是手动发布的话,也是这个目录。

if (error == false) {

        if (queryString1 == null && queryString2 == null)
            throw new ServletException("no query " + "specified");
        Analyzer analyzer = new ChineseAnalyzer();
        try {
            if (queryString1 != null && queryString2 != null) {
                BooleanClause.Occur[] clauses = { BooleanClause.Occur.MUST,
                        BooleanClause.Occur.MUST };
                query = MultiFieldQueryParser.parse(new String[] {
                        queryString1, queryString2 }, new String[] {
                        "Au_name", "Address" }, clauses, analyzer);
            } else if (queryString1 != null) {
                QueryParser qp = new QueryParser("Au_name", analyzer);
                query = qp.parse(queryString1);
            } else if (queryString2 != null) {
                QueryParser qp = new QueryParser("Address", analyzer);
                query = qp.parse(queryString2);
            }
            searcher.search(query, collector);
            System.out.println(collector.getTotalHits());
            hits = collector.topDocs().scoreDocs;

我用就好使呀。

public String stransferToGbk(String str) {
if (str == null || "".equals(str)) {
return null;
} else {
try {
return new String(str.getBytes("ISO-8859-1"), "GBK");
} catch (UnsupportedEncodingException e) {
return null;
}
}
}
写一个转换编码的方法