使用lucene對搜尋結果排序

2021-08-22 05:09:29 字數 1105 閱讀 8859

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...