Lucene 索引检索出错 (新手分少别介意)
我用lucene ver3.0.1建立了索引,但是检索总是出错。用lucene 3.0带的demo检索程序没问题,但是那个程序很长,有些看不懂,就像写个稍微简单点的。从网上找了几个例程,都有错误。这里贴一下检索的代码和错误提示,麻烦给看看
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class TestQuery {
public static void main(String[] args) throws IOException, ParseException {
TopDocs hits = null; //以前是Hits类,3.0.1好像改成TopDocs
String index = "D:\\workspace\\lucnentest\\index"; // 设置索引位置
String field = "contents"; //检索域
String queryString = "education"; //检索词
Query query = null;
IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)), true); // only searching, so read-only=true
Searcher searcher = new IndexSearcher(reader);
//原来代码 Analyzer analyzer = new StandardAnalyzer();
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
try {
//原来代码 QueryParser qp = new QueryParser("contents",field,analyzer);
QueryParser qp = new QueryParser(Version.LUCENE_30, field, analyzer);
query = qp.parse(queryString);
} catch (ParseException e) {
}
if (searcher != null) {
hits = searcher.search(query, 100);
if (((CharSequence) hits).length() > 0) {
System.out.println("找到:" + ((CharSequence) hits).length() + " 个结果!");
}
}
}
}
运行时的错误提示是:
Exception in thread "main" java.lang.ClassCastException: org.apache.lucene.search.TopDocs
at TestLucene.TestQuery.main(TestQuery.java:38)
38行是上面加黑、加粗的地方。这行原来的代码是
if (hits.length() > 0) {
但是length下面显示波浪小红线
谢谢了!已经弄了好几天了都没有头绪,分也不多了!
[解决办法]
TopDocs hits = null;,你在前面已经声明了hits是topdocs 对象,后台转成CharSequence当然不行了,用hits.totalHits 得到总数