1、在IndexSearcher类中包含了几个可重载的search方法,有一个对结果进行排序的search方法声明为
search(Query,Sort)
public classSortingExample{
private Directory directory;
public SortingExample(Directory direcotry){
this.directory=directory;
}
public void displayHits(Query query,Sort sort) throwsIOException{
IndexSearcher searcher=new IndexSearcher(directory);
Hitshits=searcher.search(query,sort);
System.out.println(StringUtils.rightPad("Title",30))+
StringUtils.rightPad("pubmonth",10)+
StringUtils.center("id",4)+StringUtils.center("score",15));
}
DecimalFormat scoreFormatter=new DeciamalFormat("0.#####");
for (int i=0;i Document doc=hits.doc(i); System.out.println(StringUtils.rightPad( StringUtils.abbreviae(doc.get("title"),29),30)+ StringUtils.rightPad(doc.get("pubmonth"),10)+ StringUtils.center(""+hits.id(i),4)+ StringUtils.leftPad(scoreFormatter.format(hits.score(i)),12) ); System.out.println(""+doc.get("category")); } searcher.close(); }} 2、使用搜索排序 StringindexDir=System.getProperty("index.dir"); FSDirectorydirectory=FSDirectory.getDirectory(indexDir,false); SortingExample example=new SortingExample(directory); 3、按相关性进行排序(降序),以下三个语句通过displayHits调用了searcher.search,实际效果一样,后2个语句还要另外创建一个Sort对象 example.displayHits(allBooks,null); example.displayHits(allBooks,Sort.RELEVANCE); example.displayHits(allBooks,new Sort()); 4、按照索引顺序排序(文档ID升序) example.displayHits(allBooks,Sort.INDEXORDER); 5、通过某个域进行排序 首先,这个域索引时要指定为Field.Keyword域:如:Field.Keyword("size",1024); 其次,要创建新的索引对象 example.displayHits(allBooks,new Sort("category")); 6、以相反顺序排序 对于相关性和文档ID使用默认排序,其他域使用升序排序。使用true指明为倒序 example.displayHits(allBooks,new Sort("category",true)); 7、根据多个域进行排序和指定排序域类型 先按category域,再按字段得分,然后按pubmonth(指定了pubmonth的排序域外为int类型) example.displayHits(allBooks,new Sort(new SortField[]{ new SortField("category"), SortField.FIELD_SCORE, new SortField("pubmonth",SortField.INT,true) })); 8、使用非默认的locale排序 public SortField(String field,Locale locale) public SortField(String field,Locale locale,boolean reverse) 当按时SortField.STRING类型排序时,应用程序内部会默认地调用String.compareTo()来确定各个项的次序。通过Collator.getInstance(Locale)方法来指定本地的Collator对象,而该对象的Collator.compare()用于决定排序的方式