我做了一个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.* " %>
谢谢。。。
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;
}
}
}
写一个转换编码的方法