Lucene的排序搜尋

來源:互聯網
上載者:User

  預設根據文檔查詢的相關度得分來進行排序,得分越高,排名越前。

  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; 

  

  

  

  

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.