預設根據文檔查詢的相關度得分來進行排序,得分越高,排名越前。
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;