默认根据文档查询的相关度得分来进行排序,得分越高,排名越前。
1、设置Lucene的文档对象Document中的一个促进因子,可以提高相关度得分。
Book book = new Book(); book.setId(2); book.setTitle("建筑的永恒之道"); book.setAuthor("亚历山大"); book.setContent("《建筑的永恒之道》提出了一个关于建筑设计、建筑和规划的新的理论、思想."); book.setPrice(65.5F); Document doc = new Document(); doc.add(new Field("id",String.valueOf(book.getId()),Store.YES,Index.NOT_ANALYZED)); doc.add(new Field("title",book.getTitle(),Store.YES,Index.ANALYZED)); doc.add(new Field("author",book.getAuthor(),Store.YES,Index.ANALYZED)); doc.add(new Field("price",String.valueOf(book.getPrice()),Store.YES,Index.ANALYZED)); doc.add(new Field("content",book.getContent(),Store.YES,Index.ANALYZED)); //设置促进得分因子值,值越大,得分越高.默认值是1.0F. doc.setBoost(2.0F);
2、自定义排序。
比如我们需要按图书的价格排序。我们需要用到IndexSearcher的search方法。search方法有很多的重载。我们使用search(Query query,int n,Sort sort)这个方法。
search(Query query,int n,Sort sort)方法参数解释:
query -----> Lucene的查询对象。
n -----> 返回前n条记录。
sort -----> 排序对象。
//按价格升序排序 //Sort sort = new Sort(new SortField("price",SortField.FLOAT)); //按价格降序排序 Sort sort = new Sort(new SortField("price",SortField.FLOAT,true)); //可按多个属性排序 //Sort sort1 = new Sort(new SortField("price",SortField.FLOAT),new SortField("id",SortField.FLOAT)); //排序搜索,返回符合条件的前10条记录. TopFieldDocs是TopDocs的子类 TopFieldDocs topFieldDocs = indexSearcher.search(query,10, sort); //搜索结果总数量 int totalCount = topFieldDocs.totalHits; // 搜索的结果列表 ScoreDoc[] scoreDocs = topFieldDocs.scoreDocs;