<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
     
    主站蜘蛛池模板: 99在线精品免费视频九九视| 久久久99精品免费观看| 四虎在线视频免费观看| 亚洲一卡2卡4卡5卡6卡残暴在线| 国产男女猛烈无遮挡免费视频网站 | 亚洲免费闲人蜜桃| 亚洲福利一区二区三区| 国产精品亚洲二区在线| 777爽死你无码免费看一二区| 中文字幕亚洲综合精品一区| 麻豆高清免费国产一区| 亚洲午夜无码久久久久小说| 免费一级毛片在线播放| 亚洲日韩av无码中文| 午夜精品在线免费观看| 黄页视频在线观看免费| 成人黄18免费视频| 污污视频免费观看网站| 亚洲AV无码专区亚洲AV伊甸园| 看亚洲a级一级毛片| 亚洲综合国产精品第一页| 久草免费福利资源站| 亚洲一卡2卡4卡5卡6卡残暴在线| 成人永久免费高清| 你懂的免费在线观看| 亚洲一区中文字幕在线电影网 | 亚洲国产日产无码精品| 全免费a级毛片免费看不卡| 久久久久久毛片免费看| 四虎永久在线精品免费影视 | 无码人妻AV免费一区二区三区| 亚洲人成激情在线播放| 四虎永久免费影院在线| 免费国产成人午夜在线观看| 国产成人99久久亚洲综合精品| 无码AV片在线观看免费| 久久亚洲精品无码av| 亚洲高清在线视频| 亚洲AV无码一区二区大桥未久| 久久久久亚洲AV成人网人人网站| 无码AV动漫精品一区二区免费|