Lucene的搜索結(jié)果默認(rèn)按相關(guān)度排序,這個(gè)相關(guān)度排序是基于內(nèi)部的Score和DocID,Score又基于關(guān)鍵詞的內(nèi)部評(píng)分和做索引時(shí)的boost。默認(rèn)Score高的排前面,如果Score一樣,再按索引順序,先索引的排前面。那么有人問了,如果我要先索引的排后面怎么辦呢?隱士研究了源碼后發(fā)現(xiàn)這是相當(dāng)簡單的事情。以下代碼基于Lucene 2.0。
看Sort的默認(rèn)構(gòu)造函數(shù),相關(guān)度就是SortField.FIELD_SCORE和SortField.FIELD_DOC的組合。
那么該如何構(gòu)造我們需要的SortField呢?請(qǐng)看SortField的一個(gè)構(gòu)造函數(shù),有一個(gè)參數(shù)reverse可供我們調(diào)整結(jié)果集的順序。
由此可見,只要構(gòu)造一個(gè)SortField[]就可以實(shí)現(xiàn)我們要的功能,請(qǐng)看:
呵呵,只要將此SortField[]作為參數(shù)傳入Sort的構(gòu)造函數(shù)得到Sort的一個(gè)instance,將此instance傳入searcher.search(query, sort)即可得到了期望的結(jié)果。
聯(lián)系客服