<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
     
    主站蜘蛛池模板: 怡红院免费的全部视频| 亚洲国产美女精品久久久| 国产精品黄页免费高清在线观看| 好大好硬好爽免费视频| 精品亚洲AV无码一区二区三区| 91制片厂制作传媒免费版樱花| 亚洲综合无码一区二区| 99久在线国内在线播放免费观看| 久久久久亚洲Av片无码v| 国内永久免费crm系统z在线| 国产亚洲精品a在线无码| 久久精品视频免费| 久久综合亚洲色HEZYO社区| 国产成人精品免费视频动漫| 亚洲国产精品无码久久久| AA免费观看的1000部电影| 最新亚洲卡一卡二卡三新区| 美女视频黄的全免费视频网站| 国产99在线|亚洲| 国产伦精品一区二区三区免费迷 | 国产高清免费在线| 老牛精品亚洲成av人片| 亚洲AV无码乱码在线观看性色扶 | 亚洲日韩中文在线精品第一| 4hu四虎免费影院www| 亚洲大尺度无码无码专区| 国产又大又粗又长免费视频| 国产午夜亚洲精品| 亚洲色欲久久久久综合网| 免费在线看污视频| 亚洲中文久久精品无码1| 国产伦精品一区二区三区免费下载 | 成人a毛片免费视频观看| 国产亚洲综合网曝门系列| 久久不见久久见免费视频7| 亚洲第一综合天堂另类专| 亚洲人成色77777| 成年女人午夜毛片免费看| 一级看片免费视频| 亚洲成AV人综合在线观看| 朝桐光亚洲专区在线中文字幕|