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("----------------------------------------------------");
    }
    
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【ford99】截止到2008-07-03 03:11:57的历史汇总数据(不包括此帖):
    发帖的总数量:60                       发帖的总分数:2480                     
    结贴的总数量:37                       结贴的总分数:1580                     
    无满意结贴数:2                        无满意结贴分:150                      
    未结的帖子数:23                       未结的总分数:900                      
    结贴的百分比:61.67 %               结分的百分比:63.71 %                  
    无满意结贴率:5.41  %               无满意结分率:9.49  %                  
    楼主加油
      

  2.   

    Hits hits = searcher.search(query) 
    这一句传递的是构造好的query查询语句,你的代码里没有处理好,Term没有加到Query里,当然找不到结果