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、使用搜索排序

String indexDir=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()用于决定排序的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值