使用lucene對搜索結果排序

          lucene默認根據匹配度對搜索結果降序排,如果對某個域進行排序?
          通常分兩步:

           step1)建索引時
          doc.add(new Field("audittime", row.get("audittime").toString(),
                          Field.Store.NO, Field.Index.UN_TOKENIZED));

          關鍵點是你需要排序的字段建索引時應該采用Field.Index.UN_TOKENIZED,至于需不需要Field.Store.NO看實際情況,反正不影響排序

          step2)搜索時
          public Hits search(SearchVO searchVO) throws IOException {
                  ................

                  Sort sort = this.buildSort(searchVO);

                  Hits hits = searcher.search(query, sort);

                  return hits;
          }

          private Sort buildSort(SearchVO searchVO) {

                  if (searchVO.getOrderby() == null || searchVO.getOrderby().length() < 1) {
                      return null;
                  }

                  Sort sort = new Sort(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?  如果你的數據更新緩慢,這樣做不會有什么問題.但更新很快的話就是災難了.



          posted on 2008-04-01 10:22 魯勝迪 閱讀(7690) 評論(1)  編輯  收藏

          評論

          # re: 使用lucene對搜索結果排序 2011-09-24 14:12 shigangxing

          不錯  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導航

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          新聞分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 富蕴县| 天柱县| 乳源| 奉新县| 黄骅市| 泸西县| 黑水县| 和田县| 论坛| 东光县| 南京市| 兰西县| 伊春市| 锦州市| 阳城县| 富川| 金沙县| 永新县| 岢岚县| 八宿县| 德化县| 东宁县| 萨嘎县| 潜山县| 呼图壁县| 鲁山县| 沧源| 宁国市| 大渡口区| 南昌县| 紫金县| 民丰县| 朔州市| 大丰市| 永城市| 嘉鱼县| 龙陵县| 桑日县| 嘉黎县| 图片| 昌都县|