首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

怎么在动态搜索得到大量的博客记录后,再针对它们各自的Tag进行数量统计

2012-10-26 
如何在动态搜索得到大量的博客记录后,再针对它们各自的Tag进行数量统计?场景:一个博客网站,有N多的博客信

如何在动态搜索得到大量的博客记录后,再针对它们各自的Tag进行数量统计?
场景:
一个博客网站,有N多的博客信息,这些信息都会被标上不同的Tag
我输入搜索某个关键字来查找我需要的博客为M条,在这个M条里各条的Tag又是不一样的。

这样在搜索结果中需要统计出每一个Tag的数量出来进行显示

比如:根据xxx关键字后搜索到的结果为以下3条,假如:Tag以空格隔离存储,split后为独立的Tag
1:Seam框架使用开发指南   对应的Tag为:Java Seam Framwork 开发
2:Spring框架最佳实践     对应的Tag为:Java Spring 最佳实践
3:Hibernate技术点对点    对应的Tag为:Java Hibernate 点对点

于是显示的结果为

Tag:
Java(3)、Seam(1)、Framework(1)、开发(1)、Spring(1)、最佳实践(1)、Hibernate(1)、点对点(1)

结果:
1:Seam框架使用开发指南
2:Spring框架最佳实践
3:Hibernate技术点对点

如果说在查询到数量不多的情况下,遍历所有的记录后,把Tag进行split后统计加和就OK了。但是如果大量的情况下,就会出现性能问题了。各位有何高招?Filter filter = new Filter(userQuery);Hits allHits = searcher.search(userQuery);Hits tag1Hits = searcher.search(tag1Query,filter);......
这个速度 那是很快的啦。
robbin说的TermVector不是那个意思吧,应该是Term在原文中的位置 6 楼 grantbb 2008-01-07   楼上说的filter方案也解决不了问题,因为每次查询结果相关的tag是变化的。之前我也做过类似的应用,也是因为性能的问题终止了。 7 楼 roki 2008-01-10   第一种方法, 上层一些,比较简单,但是效率差些

第一步: 在做索引的时候就计算好Tag个数, 添加一个字段tagCount,保存为Indexed和Stored属性

第二步:如果用的是Nutch的前端,则直接有参数支持按照tagCount排序, 如果是自己写的前段, 则自己把返回结果按照tagCount排序就行了


第二种方法,依然还是需要在做索引的时候就计算好Tag个数, 添加一个字段tagCount,但是把排序在 HitCollector接口实现里做掉, 效率比第一种高不少,但是写起来麻烦些。



8 楼 grantbb 2008-01-11   楼上还没有理解,

这个问题难就难在,需要统计当前查询相关结果中出现的tag及出现的次数。 9 楼 galaxystar 2008-01-13   赞同robbin的方案,这类应用一般都是需要承受非常大的访问量,在查询列表时(非detail),走搜索引擎是最完美的。

增量build索引(根据修改时间)可以解决,blog数据更新的问题。

例子:商务网站 http://list.taobao.com/browse/search_auction.htm?cat=1101。每个属性都是商品的一个标签。
10 楼 jjjava 2008-01-26   我觉得这个问题没有说清楚:
首先是怎么定义的tag:
是用户在一开始写blog 的时候自己制定的tag,那种用逗号分隔的字符串形式的
还是系统在后台默认定义一些tag ,比如ajax,然后用lucene 搜索这篇文章,如果找到了这个关键字就认为这篇文章包含这个tag,否者不是.

另外就是你怎么定义的搜索行为:
是用户输入一个字符串查询,然后查询范围是全文,用的lucene 做的索引,
还是用户要查询的文章的标题(应该指的是第一种)

如果tag 是写blog 时候就自己加上去的,数据库中应该有一个tag 表,包含主键,tagname ,blog外键 ,在用lucene 搜索的时候应该想办法返回这个tag 表的主键,然后把这个主键传给下面这种sql .

select count(tagname),tagname from (
       select tagname , blogid from tag where blogid in  (前面返回的那个主键集合 )
)group by tagname

如果这个tag 本身不是有写blog 的那个人定义的,是系统自己定义的(根据一些热门的关键字),那应该预先计算这些tag ,在blog 保存的时候和系统定义新的tag  的时候.

11 楼 dengtl 2008-01-26   为tag设计一个数据表,在生成博客的时候统计,并更新该表。如果闲统计慢,可以在后台开线程异步做。 12 楼 galaxystar 2008-01-31   python做这些不错 13 楼 txzyhm521 2008-02-20   galaxystar 写道python做这些不错
和语言有关吗?
PS:觉得robin的思路比较靠普.应该根据term来做,性能才会有保证

热点排行