lucene2.0学习文档八

下面是搜索的例子:
public void SearchSort1() throws IOException, ParseException {
       IndexSearcher indexSearcher = new IndexSearcher("C:\\indexStore");
       QueryParser queryParser = new QueryParser("sort",new StandardAnalyzer());
       Query query = queryParser.parse("4");
       Hits hits = indexSearcher.search(query);
       System.out.println("有"+hits.length()+"个结果");
       Document doc = hits.doc(0);
       System.out.println(doc.get("sort"));
}
public void SearchSort2() throws IOException, ParseException {
       IndexSearcher indexSearcher = new IndexSearcher("C:\\indexStore");
       Query query = new RangeQuery(new Term("sort","1"),new Term("sort","9"),true);
       //这个地方前面没有提到,它是用于范围的Query可以看一下帮助文档.
       Hits hits = indexSearcher.search(query,new Sort(new SortField("sort",new MySortComparatorSource())));
     System.out.println("有"+hits.length()+"个结果");
       for(int i=0;i< hits.length();i++){
           Document doc = hits.doc(i);
           System.out.println(doc.get("sort"));
       }
}
public class MyScoreDocComparator implements ScoreDocComparator {
private Integer[]sort;
public MyScoreDocComparator(String s,IndexReader reader, String fieldname)
     throws IOException{
      sort = new Integer[reader.maxDoc()];
      for(int i = 0;i< reader.maxDoc();i++){
           Document doc =reader.document(i);
           sort[i]=new Integer(doc.get("sort"));
       }
   }
   public int compare(ScoreDoc i, ScoreDoc j){
      if(sort[i.doc]>sort[j.doc])
           return 1;
      if(sort[i.doc]< sort[j.doc])
          return -1;
      return 0;
   }
   public int sortType(){
      return SortField.INT;
   }
   public Comparable sortValue(ScoreDoc i){
    // TODO 自动生成方法存根
    return new Integer(sort[i.doc]);
   }
}
public class MySortComparatorSource implements SortComparatorSource {
private static final long serialVersionUID = -9189690812107968361L;
public ScoreDocComparator newComparator(IndexReader reader, String fieldname)
     throws IOException{
        if(fieldname.equals("sort"))
           return new MyScoreDocComparator("sort",reader,fieldname);
           return null;
        }
}
SearchSort1()输出的结果没有排序,SearchSort2()就排序了。

你可能感兴趣的:(C++,c,C#,J#)