lucene預設根據匹配度對搜尋結果降序排,如果對某個域進行排序?
通常分兩步:
step1)建索引時
newfield(
"audittime
",row.get(
"audittime
").tostring(),
關鍵點是你需要排序的字段建索引時應該採用
field.index.un_tokenized,至於需不需要
field.store.no看實際情況,反正不影響排序
step2)搜尋時
hitssearch(searchvosearchvo)
throws
ioexception
...
private
sortbuildsort(searchvosearchvo)
...sortsort
=newsort(searchvo.getorderby(),
(searchvo.getascflag()==1?false:true
));return
sort;
關鍵點是通過建立乙個sort例項然後傳給indexsearcher 的另乙個過載方法search(query query,sort sort);
通過sort你可以指定排序欄位名,公升序降序.
如果你需要特指字段型別,你需要使用 new sort(sortfield field)
或者你需要通過多欄位排序,你需要使用 new sort(sortfield fields)
我就不再贅述了
題外話:
使用lucene 排序是很簡單的,但如何發揮它的效果是乙個值得思考的地方.
如果你是實時的更新lucene索引我沒話說(這需要相當謹慎的設計).
如果你定時更新索引,就會有些問題,比如你要排序的字段更新速度很快,你應該如何顯示它? 因為你排序的資料(即建索引時的資料)和當前的資料並不完全同步,這會給顯示帶來問題.如果你顯示建索引時的資料,這樣排序本身沒問題,但客戶會很奇怪我的資料明明是6了怎麼還顯示4.如果你顯示當前的資料就更奇怪了,客戶可能會奇怪我的資料是1000怎麼排名第4,排名第一的才500? 如果你的資料更新緩慢,這樣做不會有什麼問題.但更新很快的話就是災難了.
使用lucene對搜尋結果排序
lucene預設根據匹配度對搜尋結果降序排,如果對某個域進行排序?通常分兩步 step1 建索引時 newfield audittime row.get audittime tostring 關鍵點是你需要排序的字段建索引時應該採用 field.index.un tokenized,至於需不需要 f...
lucene 對搜尋結果進行排序
1 在indexsearcher類中包含了幾個可過載的search方法,有乙個對結果進行排序的search方法宣告為 search query,sort public classsortingexample private directory directory public sortingexam...
lucene多樣化搜尋,結果排序。
一 多樣化的搜尋 乙個關鍵字,對乙個字段進行查詢 queryparser qp new queryparser content analyzer query qp.parse keyword hits hits searcher.search query 模糊查詢 term term new ter...