读书人

Lucene 目录检索出错 (新手分少别介意

发布时间: 2013-01-08 14:02:13 作者: rapoo

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 得到总数

读书人网 >网络基础

热点推荐