Raymond
Java筆記
導(dǎo)航
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
<
2006年2月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
統(tǒng)計
隨筆 - 21
文章 - 2
評論 - 6
引用 - 0
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(1)
給我留言
查看公開留言
查看私人留言
隨筆分類
Java(9)
(rss)
JavaScript
(rss)
Software Engineering
(rss)
技術(shù)雜談(1)
(rss)
網(wǎng)頁技術(shù)(1)
(rss)
隨筆檔案
2006年3月 (2)
2006年2月 (4)
2006年1月 (8)
2005年12月 (7)
文章分類
Java(2)
(rss)
JavaScript
(rss)
技術(shù)漫談
(rss)
軟件過程
(rss)
文章檔案
2006年3月 (2)
Java
Java視線論壇
(rss)
技術(shù)漫談
itpub.net
曾登高
數(shù)據(jù)庫
網(wǎng)頁技術(shù)(HTML/JavaScript/CSS)
軟件過程
搜索
最新評論
1.?re: 使用TPTP和eclipse進行Profiling(剖析)-簡介
我支持你,整理過的東西就是自己的東西。
--fenixshadow
2.?re: 使用TPTP和eclipse進行Profiling(剖析)-簡介
怎么總是復(fù)制過來復(fù)制過去!沒一點自己的意見嗎
--靠
3.?re: DOM的Document對象轉(zhuǎn)換到String的中文編碼(亂碼)問題
謝謝你,你的文章幫助了我:)
--AA
4.?re: [導(dǎo)入]網(wǎng)頁模塊拖放
還可以啊~~
--a文學(xué)網(wǎng)—相思無語
5.?re: 實現(xiàn)隊列的JavaScript對象
日,為什么不能放首頁,我覺得不錯
--williamxs
閱讀排行榜
1.?使用TPTP和eclipse進行Profiling(剖析)-簡介(5637)
2.?DOM的Document對象轉(zhuǎn)換到String的中文編碼(亂碼)問題(3908)
3.?在lucene實現(xiàn)按關(guān)鍵字出現(xiàn)次數(shù)排序的列表(1741)
4.?使用JMeter進行壓力測試(1578)
5.?ANT 的javax.xml.parsers.FactoryConfigurationError 錯誤解決辦法(1570)
評論排行榜
1.?使用TPTP和eclipse進行Profiling(剖析)-簡介(2)
2.?實現(xiàn)隊列的JavaScript對象(2)
3.?DOM的Document對象轉(zhuǎn)換到String的中文編碼(亂碼)問題(1)
4.?[導(dǎo)入]網(wǎng)頁模塊拖放(1)
5.?使用Struts(0)
在lucene實現(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,累計記錄每個關(guān)鍵字得到的次數(shù)。
排序部分用另外的一個TagSummary類來獲得,這里就不詳細給出了。
問題: 這是一個直觀的方法,但是相信頻繁調(diào)用這樣的方法會造成服務(wù)器的嚴重負擔(dān)。可以考慮一下用緩存的方法,在沒有關(guān)鍵字未曾發(fā)生改變之前,只在第一次調(diào)用這樣的方法,之后把結(jié)果緩存在數(shù)據(jù)表或者內(nèi)存當(dāng)中。有更新的時候,通過版本號對比以決定是否需要更新。
posted on 2006-02-04 14:26
Raymond的Java筆記
閱讀(1741)
評論(0)
編輯
收藏
所屬分類:
Java
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
不同方法遍歷列表的時間效率
使用JMeter進行壓力測試
使用TPTP和eclipse進行Profiling(剖析)-簡介
Volatile Fields
在lucene實現(xiàn)按關(guān)鍵字出現(xiàn)次數(shù)排序的列表
Resin + Struts 的中文亂碼問題解決
Java判定字符是否中文
實現(xiàn)隊列的JavaScript對象
Resin 編譯的奇怪問題解決
Powered by:
BlogJava
Copyright © Raymond的Java筆記
主站蜘蛛池模板:
大丰市
|
桂林市
|
高要市
|
巴中市
|
松滋市
|
华容县
|
凤山县
|
宁安市
|
喀什市
|
九台市
|
延寿县
|
祁门县
|
桐庐县
|
如皋市
|
翁牛特旗
|
诸暨市
|
昌平区
|
平乡县
|
榆林市
|
井研县
|
池州市
|
台北市
|
普兰县
|
胶南市
|
阿荣旗
|
息烽县
|
铜山县
|
怀安县
|
安陆市
|
丹凤县
|
霍邱县
|
济源市
|
西和县
|
佛冈县
|
西贡区
|
历史
|
德清县
|
济宁市
|
湘乡市
|
舟曲县
|
云南省
|