Raymond
Java笔记
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
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
统计
随笔 - 21
文章 - 2
评论 - 6
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
Java(9)
(rss)
JavaScript
(rss)
Software Engineering
(rss)
技术杂谈(1)
(rss)
网页技术(1)
(rss)
随笔档案
2006年3月 (2)
2006年2月 (4)
2006年1月 (8)
2005年12月 (7)
文章分类
Java(2)
(rss)
JavaScript
(rss)
技术漫谈
(rss)
软件过程
(rss)
文章档案
2006年3月 (2)
Java
Java视线论坛
(rss)
技术漫谈
itpub.net
曾登高
数据库
网页技术(HTML/JavaScript/CSS)
软件过程
搜索
最新评论
1. re: 使用TPTP和eclipse进行Profiling(剖析)-简介
我支持你,整理过的东西就是自己的东西。
--fenixshadow
2. re: 使用TPTP和eclipse进行Profiling(剖析)-简介
怎么总是复制过来复制过去!没一点自己的意见吗
--靠
3. re: DOM的Document对象转换到String的中文编码(乱码)问题
谢谢你,你的文章帮助了我:)
--AA
4. re: [导入]网页模块拖放
还可以啊~~
--a文学网—相思无语
5. re: 实现队列的JavaScript对象
日,为什么不能放首页,我觉得不错
--williamxs
阅读排行榜
1. 使用TPTP和eclipse进行Profiling(剖析)-简介(5626)
2. DOM的Document对象转换到String的中文编码(乱码)问题(3896)
3. 在lucene实现按关键字出现次数排序的列表(1732)
4. ANT 的javax.xml.parsers.FactoryConfigurationError 错误解决办法(1567)
5. 使用JMeter进行压力测试(1562)
评论排行榜
1. 使用TPTP和eclipse进行Profiling(剖析)-简介(2)
2. 实现队列的JavaScript对象(2)
3. DOM的Document对象转换到String的中文编码(乱码)问题(1)
4. [导入]网页模块拖放(1)
5. 使用Struts(0)
在lucene实现按关键字出现次数排序的列表
需求: 在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笔记
阅读(1732)
评论(0)
编辑
收藏
所属分类:
Java
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
不同方法遍历列表的时间效率
使用JMeter进行压力测试
使用TPTP和eclipse进行Profiling(剖析)-简介
Volatile Fields
在lucene实现按关键字出现次数排序的列表
Resin + Struts 的中文乱码问题解决
Java判定字符是否中文
实现队列的JavaScript对象
Resin 编译的奇怪问题解决