<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
     
    主站蜘蛛池模板: 亚洲avav天堂av在线不卡| 亚洲精品乱码久久久久久下载 | 亚洲视频在线观看2018| 亚洲无删减国产精品一区| 亚洲欧洲精品成人久久曰| 免费无码又爽又刺激高潮软件| 亚洲国产精品碰碰| 中文字幕av无码不卡免费| 国产亚洲福利精品一区| 亚洲AV无码国产精品永久一区| 国产精品区免费视频| 亚洲成?Ⅴ人在线观看无码| 国产精品亚洲专区一区| 久久久青草青青国产亚洲免观 | 亚洲va中文字幕无码久久不卡| 全免费a级毛片免费看| 亚洲黄色网址在线观看| 国产一卡二卡3卡四卡免费| 亚洲人成色7777在线观看| 久久www免费人成精品香蕉| 国产免费观看网站| 成人精品综合免费视频| 亚洲国产精品无码成人片久久| 亚洲免费视频在线观看| 中文亚洲成a人片在线观看| 你好老叔电影观看免费| 久久亚洲国产精品成人AV秋霞| 久久久久国色AV免费看图片| 亚洲国产精品成人综合色在线| 亚洲国产成人影院播放| 免费成人在线视频观看| 国产亚洲国产bv网站在线 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲日本VA午夜在线影院| 亚洲第一区在线观看| 伊人久久免费视频| 亚洲精品成a人在线观看夫| 国产亚洲精久久久久久无码AV | 午夜毛片不卡高清免费| 一级特黄录像免费播放中文版| 国产aa免费视频|