国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
BlogJava - raymond - 在lucene實(shí)現(xiàn)按關(guān)鍵字出現(xiàn)次數(shù)排序的列表
需求: 在lucene索引中建立了很多關(guān)鍵字的索引,想獲得一個當(dāng)前用戶的關(guān)鍵字列表,并且每個關(guān)鍵字還帶有使用了多少次的信息。

解決方法:
使用自定義的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,都會調(diào)用這個方法的collect方法,因此可以在這個對象當(dāng)中放一個HashMap,累計(jì)記錄每個關(guān)鍵字得到的次數(shù)。

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

問題: 這是一個直觀的方法,但是相信頻繁調(diào)用這樣的方法會造成服務(wù)器的嚴(yán)重負(fù)擔(dān)??梢钥紤]一下用緩存的方法,在沒有關(guān)鍵字未曾發(fā)生改變之前,只在第一次調(diào)用這樣的方法,之后把結(jié)果緩存在數(shù)據(jù)表或者內(nèi)存當(dāng)中。有更新的時候,通過版本號對比以決定是否需要更新。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
lucene多種搜索方式詳解例子
[原創(chuàng)]全文搜索引擎Lucene學(xué)習(xí)筆記(頁 1) - 『 編程設(shè)計(jì) 』 - 青韶論壇 湘...
Lucene 3.6 (3.X) 入門實(shí)例
Lucene基本適用介紹
使用Lucene.Net實(shí)現(xiàn)全文檢索
跟我一起云計(jì)算(4)lucene
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服