<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Raymond
    Java筆記
    需求: 在lucene索引中建立了很多關鍵字的索引,想獲得一個當前用戶的關鍵字列表,并且每個關鍵字還帶有使用了多少次的信息。

    解決方法:
    使用自定義的HitCollector對象,代碼如下
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Set;

    import org.apache.lucene.document.Document;
    import org.apache.lucene.search.HitCollector;
    import org.apache.lucene.search.IndexSearcher;

    public class TagCollector extends HitCollector {
        
    private IndexSearcher searcher;
        
    private HashMap<String,Integer> tagList=new HashMap<String,Integer>();
        
    public TagCollector(IndexSearcher searcher) {
            
    this.searcher=searcher;
        }

        @Override
        
    public void collect(int docID, float score) {
            
    try {
                Document doc
    =searcher.doc(docID);
                String[] tagValues
    =doc.getValues("tag");
                
    if (tagValues!=null{
                    
    for (int i=0;i<tagValues.length;i++{
                        addTagCount(tagValues[i]);
                    }

                }

            }
     catch (IOException e) {
                e.printStackTrace();
            }


        }

        
        
    private void addTagCount(String tagName) {
            
    int count=1;
            
    if (tagList.containsKey(tagName)) {
                count
    =(Integer)tagList.get(tagName)+1;
            }

            tagList.put(tagName,count);
        }

        
        
    public HashMap<String,Integer> getTagList() {
            
    return tagList;
        }

        
        @SuppressWarnings(
    "unchecked")
        
    public ArrayList<TagSummary> getSortedTagList(boolean ascending) {
            ArrayList
    <TagSummary> list=new ArrayList<TagSummary>();
            Iterator keyIterator
    =tagList.keySet().iterator();
            
    while (keyIterator.hasNext()) {
                String key
    =(String)keyIterator.next();
                
    int value=tagList.get(key);
                list.add(
    new TagSummary(key,value));
            }

            Collections.sort(list);
            
    if (!ascending) {
                Collections.reverse(list);
            }

            
    return list;
        }

        

    }

    功能說明: 每個搜索到的hits,都會調用這個方法的collect方法,因此可以在這個對象當中放一個HashMap,累計記錄每個關鍵字得到的次數。

    排序部分用另外的一個TagSummary類來獲得,這里就不詳細給出了。

    問題: 這是一個直觀的方法,但是相信頻繁調用這樣的方法會造成服務器的嚴重負擔。可以考慮一下用緩存的方法,在沒有關鍵字未曾發生改變之前,只在第一次調用這樣的方法,之后把結果緩存在數據表或者內存當中。有更新的時候,通過版本號對比以決定是否需要更新。
    posted on 2006-02-04 14:26 Raymond的Java筆記 閱讀(1738) 評論(0)  編輯  收藏 所屬分類: Java
     
    主站蜘蛛池模板: 美女黄网站人色视频免费国产| 免费一级毛片不卡在线播放| 国产日产亚洲系列最新| 亚洲一级视频在线观看| a级片在线免费看| 午夜免费福利影院| 国产免费久久久久久无码| 色播在线永久免费视频| 成人免费乱码大片A毛片| 伊人婷婷综合缴情亚洲五月| 日韩一区二区三区免费播放| 97无码免费人妻超级碰碰碰碰| 精品国产亚洲一区二区三区| kk4kk免费视频毛片| 免费大黄网站在线观| 无码专区AAAAAA免费视频| 国产亚洲精品自在久久| 一二三四在线观看免费高清中文在线观看| 亚洲AV无码一区二区三区系列 | 亚洲日韩av无码中文| 美女视频黄a视频全免费| 亚洲精品福利在线观看| 1000部拍拍拍18勿入免费视频软件 | 久久久久国产免费| 精品久久久久亚洲| 亚洲va中文字幕无码| 新最免费影视大全在线播放| 亚洲国产人成在线观看| 免费看www视频| 国内精品免费在线观看| 久久久久久亚洲AV无码专区| 99re6在线精品视频免费播放 | 黄色三级三级免费看| 亚洲欧洲日产国码无码久久99 | 中文在线免费观看| 精品久久久久亚洲| 亚洲AV无码无限在线观看不卡| 国产网站在线免费观看| 精品免费久久久久国产一区| 亚洲AV女人18毛片水真多| 中文字幕亚洲图片|