`

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

    博客分类:
  • Java
阅读更多
场景:
一个博客网站,有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了。但是如果大量的情况下,就会出现性能问题了。各位有何高招?
分享到:
评论
13 楼 txzyhm521 2008-02-20  
galaxystar 写道
python做这些不错

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

9 楼 galaxystar 2008-01-13  
赞同robbin的方案,这类应用一般都是需要承受非常大的访问量,在查询列表时(非detail),走搜索引擎是最完美的。

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

例子:商务网站 http://list.taobao.com/browse/search_auction.htm?cat=1101。每个属性都是商品的一个标签。
8 楼 grantbb 2008-01-11  
楼上还没有理解,

这个问题难就难在,需要统计当前查询相关结果中出现的tag及出现的次数。
7 楼 roki 2008-01-10  
第一种方法, 上层一些,比较简单,但是效率差些

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

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


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



6 楼 grantbb 2008-01-07  
楼上说的filter方案也解决不了问题,因为每次查询结果相关的tag是变化的。之前我也做过类似的应用,也是因为性能的问题终止了。
5 楼 javaeyes 2007-12-28  
其实这里关键的难点在于你不知道搜索结果中的Tag有多少,如果你想知道,那等于要遍历所有Document来统计Tag。如果Tag相对每次搜索固定,那lucene就能很好的解决啦,用一个Filter来做统计。代码就像下面这种
Filter filter = new Filter(userQuery);
Hits allHits = searcher.search(userQuery);
Hits tag1Hits = searcher.search(tag1Query,filter);
......

这个速度 那是很快的啦。
robbin说的TermVector不是那个意思吧,应该是Term在原文中的位置
4 楼 ddandyy 2007-12-28  
这个应该用sql就能做出来吧  表嵌套
就是不知道大数据量的性能会怎么样
3 楼 抛出异常的爱 2007-12-28  
放一个count字段让rails去维护
2 楼 sorphi 2007-12-28  
tag使用频率,应该周期性的生成统计结果存储。
1 楼 robbin 2007-12-28  
我觉得可以用全文检索来解决,在做索引的时候把博客的tag这个field的term_vector保存下来。搜索的时候,可以从全文检索里面获取某个tag在整个全文索引里面出现的次数,已经在哪些document里面出现过。

相关推荐

    用过的tag用过的tag 用过的tag

    用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用过的tag用...

    仿照网易博客的tag

    仿照网易博客的tag

    Better Tag Cloud插件

    2.插件激活后,在后台的左侧栏中“setting”--->“Better Tag Cloud”链接,点击链接对其进行设置,页面如下图: 通过图中的各项设置,可以规范Tag标签对,当然,如果你不想某些标签显示,它还有个功能就是...

    符合w3c规范的纯html+js动态TAG云

    类似于百度index的动态TAG云特效。找了好久,原作者不详,特急于与大家分享。 与纯flash方式的TAG云相比,这个云对SEO非常友好,更重要的是它也有动态缩放循环效果,与FLASH的效果是一样的。 使用方法见演示html页 ...

    apriltag 标签 tag36h11

    apriltag 标签 tag36h11

    android开发记录分类-Tag标签列表 - 农民伯伯 - 博客园.pdf

    android开发记录分类-Tag标签列表

    阿里开源canal的扩展生产mq增加key和tag关联业务

    为我们在做业务兼容,业务迁移的过程中提供了很多便利,但是个人在工作中发现有一个问题,就是目前个版本生产的消息都没有key和tag,使得在业务链中比较难追溯到业务的消息,所以个人通过下载到源码然后进行改造代码...

    帝国cms-TAG高级管理插件.zip

    帝国CMS 7.2 7.5 TAG插件 TAG高级管理工具tags插件SEO利器 一、TAG展示新增功能 TAG伪静态可设置以TAG拼音或TAGID形式,更利于SEO 自带TAG首页功能,方便展示全部TAg 自定义列表排序 二、TAG管理新增功能 批量增加...

    flash-tag.rar_flash tagcloud_js tagCloud_tagCloud_tagcloud.s_tag

    通过addVariable方法,给其传入tagcloud参数,此参数的值即为标签云需要显示的内容,注意传给 tagcloud 的值必需进行URL编码,可以使用JS的 encodeURIComponent 函数对字符串进行URL编码后赋值给 tagcloud ,也可以...

    自动提取TAG 资源

    自动提取tag自动提取tag自动提取tag自动提取tag自动提取tag自动提取tag自动提取tag自动提取tag自动提取tag

    Discuz插件 TAG标签自动获取SEO 1.3 商业版.zip

     本插件tag的获取方式是从百度搜索中提取相关搜索关键词进行设置,简单的说就是您在百度搜索一个东西时百度下方显示的相关搜索的词语。这些关键词都为百度指数较高的,与您此贴意义相近的热度词,对于SEO效果非常好...

    Tag文件与Tag标记

    自己花钱在豆丁上买的文档,确实很难找的文档。介绍tag标签的

    基于J2EE框架的个人博客系统项目毕业设计论...

    在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客页面访问量...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客页面访问量...

    高分辨率tag36h11

    Apriltag官网下载的tag分辨率极低,因此这里上传一个openmv生成的高分辨率tag资源,共587张

    EVENT TAG EVENT TAG EVENT TAG

    Activity Details独木舟水球同乐日 及 独木舟水球邀请赛 @ 迪欣湖 [2010年7月3,4日(星期六,日)] ...(第二节) 下午二时至五时正 (Session 2) 2pm ‘ 5pm活动详情 Activity Details而 2010年7月4日(星期日) 上午十时至...

    音视频FLV封转文件解析Flv header、Tag header、Audio tag、Video tag及Scrip tag

    环境:Linux 192.168.1.110 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 ...linux下编译运行,主要针对FLV封装格式的音视频文件进行解析,代码主要实现功能逻辑,后续再行优化。

    openmv4-AprilTag标记追踪代码

    AprilTag标记追踪 AprilTag的种类叫家族(family),有下面的几种: TAG16H5 → 0 to 29 TAG25H7 → 0 to 241 TAG25H9 → 0 to 34 TAG36H10 → 0 to 2319 TAG36H11 → 0 to 586 ARTOOLKIT → 0 to 511 注意:一般...

    标记库,tag实例,java技术

    tag,标记库,java技术tag,标记库,java技术

Global site tag (gtag.js) - Google Analytics