欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lucene-对搜索结果进行排序

程序员文章站 2022-05-15 16:04:39
...

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