INDEXREADER指定的目录有索引文件,可是HITS返回的长度为零,请达人指点,附上源代码
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/package lucenesearch;import java.io.StringReader;
import java.util.Date;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.TokenStream;
//import org.apache.lucene.analysis.cjk.CJKAnalyzer;
//import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;import java.util.Date;import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;/**
*
* @author jianwu
*/
public class lucenesearch { /**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
// TODO code application logic here
lucenesearch test = new lucenesearch();
Hits h = null;
h = test.search("a");
test.printResult(h);
h = test.search("unrepentant");
test.printResult(h);
h = test.search("Uma Thurman");
test.printResult(h);
} public lucenesearch() {
try {
searcher = new IndexSearcher(IndexReader.open("c:\\index"));
} catch (Exception e) {
e.printStackTrace();
}
}
private IndexSearcher searcher = null;
private Query query = null;
StandardAnalyzer analyzer =new StandardAnalyzer();
Highlighter highlighter = null;
public final Hits search(String keyword) {
System.out.print("Searching now: " + keyword);
try {
QueryParser qp = new QueryParser("Title",analyzer);
query = qp.parse(keyword);
Term term = new Term("Content", keyword);
FuzzyQuery fq = new FuzzyQuery(term);
Date start = new Date();
Hits hits = searcher.search(query);
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>", "</read>");
highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(10));
Date end = new Date();
System.out.println("Search is done" + (end.getTime()-start.getTime()) + "milliseconds");
return hits;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void printResult(Hits h) {
if (h.length() == 0) {
System.out.println("Sorry, No results");
} else {
for (int i = 0; i < h.length(); i++) {
try {
Document doc = h.doc(i);
System.out.println("This is: " + (i+1) + " result; " + doc.get("id") + "title: " + doc.get("title") + "content: " + doc.get("content"));
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(doc.get("title")));
System.out.println(highlighter.getBestFragment(tokenStream, h.doc(i).get("title")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("----------------------------------------------------");
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/package lucenesearch;import java.io.StringReader;
import java.util.Date;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.TokenStream;
//import org.apache.lucene.analysis.cjk.CJKAnalyzer;
//import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;import java.util.Date;import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;/**
*
* @author jianwu
*/
public class lucenesearch { /**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
// TODO code application logic here
lucenesearch test = new lucenesearch();
Hits h = null;
h = test.search("a");
test.printResult(h);
h = test.search("unrepentant");
test.printResult(h);
h = test.search("Uma Thurman");
test.printResult(h);
} public lucenesearch() {
try {
searcher = new IndexSearcher(IndexReader.open("c:\\index"));
} catch (Exception e) {
e.printStackTrace();
}
}
private IndexSearcher searcher = null;
private Query query = null;
StandardAnalyzer analyzer =new StandardAnalyzer();
Highlighter highlighter = null;
public final Hits search(String keyword) {
System.out.print("Searching now: " + keyword);
try {
QueryParser qp = new QueryParser("Title",analyzer);
query = qp.parse(keyword);
Term term = new Term("Content", keyword);
FuzzyQuery fq = new FuzzyQuery(term);
Date start = new Date();
Hits hits = searcher.search(query);
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>", "</read>");
highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(10));
Date end = new Date();
System.out.println("Search is done" + (end.getTime()-start.getTime()) + "milliseconds");
return hits;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void printResult(Hits h) {
if (h.length() == 0) {
System.out.println("Sorry, No results");
} else {
for (int i = 0; i < h.length(); i++) {
try {
Document doc = h.doc(i);
System.out.println("This is: " + (i+1) + " result; " + doc.get("id") + "title: " + doc.get("title") + "content: " + doc.get("content"));
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(doc.get("title")));
System.out.println(highlighter.getBestFragment(tokenStream, h.doc(i).get("title")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("----------------------------------------------------");
}
}
楼主【ford99】截止到2008-07-03 03:11:57的历史汇总数据(不包括此帖):
发帖的总数量:60 发帖的总分数:2480
结贴的总数量:37 结贴的总分数:1580
无满意结贴数:2 无满意结贴分:150
未结的帖子数:23 未结的总分数:900
结贴的百分比:61.67 % 结分的百分比:63.71 %
无满意结贴率:5.41 % 无满意结分率:9.49 %
楼主加油
这一句传递的是构造好的query查询语句,你的代码里没有处理好,Term没有加到Query里,当然找不到结果