lucene-对搜索结果进行排序

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<hits.length();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()用于决定排序的方式

你可能感兴趣的:(Lucene)