`

如何在动态搜索得到大量的博客记录后,再针对它们各自的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

    9. **前后端交互**:前端通过Ajax异步请求向后端发送标签数据,后端处理后返回结果,前端再动态更新页面,展示新添加的标签或搜索结果。 10. **安全性**:在处理用户输入时,需要防止SQL注入等安全问题,确保系统的...

    wordpress插件SEO Title Tag(个性化浏览器title)

    默认情况下,WordPress会使用博客名称或页面的标题作为Title Tag,但SEO Title Tag插件提供了更高级的控制,让用户可以根据自己的需求定制每个页面的Title Tag,从而提高每个页面的针对性和独特性。 安装SEO Title ...

    pb权限控制(tag法)

    PB权限控制(Tag法)是一种在PowerBuilder应用中实现精细化权限管理的方法,尤其适用于需要控制大量权限项的系统。在PB环境下,权限控制通常涉及到不同用户对系统内多个子系统、菜单项、按钮等操作的权限分配。Tag法...

    apriltag-windows专用安装包

    《apriltag在Windows环境下的安装与应用详解》 apriltag是一款开源的视觉目标检测库,主要用于识别图像中的特定标记。它以其高效、鲁棒的特性被广泛应用于机器人导航、增强现实等领域。然而,对于Windows用户来说,...

    apriltag 标签 tag36h11

    apriltag的核心算法包括边缘检测、候选框生成、解码和后处理四个步骤,确保了在实际环境中的稳定性和可靠性。 二、tag36h11特性 tag36h11是apriltag家族中的一种特定标签设计,其“36”代表该标签由36个黑色方块和...

    android中设置tag

    1. **标识和区分视图**:在复杂的布局中,可以通过设置Tag来区分不同的视图,例如在一个ListView或RecyclerView中,每个Item可能包含多个视图,Tag可以用来标识它们各自的用途。 2. **存储额外信息**:Tag还可以...

    AprilTag高清二维码矢量图(全)

    3. 工业自动化:在工厂自动化生产线中,AprilTag可以标记工件,辅助机器人进行精准抓取和装配操作。 4. 教育与研究:在计算机视觉和机器人学的教育领域,AprilTag是常用的实验工具,帮助学生理解和实践目标检测和...

    TIA博途中如何通过PLC变量控制开始和停止记录数据?.docx

    在实际运行中,初始状态下,由于ControlDataLogStart和ControlDataLogStop都是False,数据记录不会进行。当我们通过PLC将ControlDataLogStart设为True,数据记录将以10秒的周期开始。反之,当ControlDataLogStop设为...

    Tag文件与Tag标记

    【Tag文件与Tag标记】是网站开发设计中的一个重要概念,主要应用于Java服务器页面(JSP)技术中,用于实现自定义标签库。Tag文件是一种特殊类型的文本文件,它们以`.tag`为扩展名,功能类似于JSP文件,但用户无法...

    自动提取TAG 资源

    这个过程通常用于内容分析、数据挖掘和搜索引擎优化等多个场景,目的是从大量文本数据中自动识别出具有代表性的关键词或短语,即“TAG”,来概括内容的主题或者帮助理解文本的上下文。 NICTCLAS_Release是一个可能...

    tag解析工具.rar

    1. **信息检索**:在大量文档中快速定位含有特定Tag的信息,提高搜索效率。 2. **数据分析**:通过对Tag的分析,揭示数据的模式和趋势,为决策提供支持。 3. **内容推荐**:在推荐系统中,基于用户的Tag偏好来推送...

    织梦tag标签静态化

    5. **SEO优化**:静态化的tag页面更容易被搜索引擎爬虫抓取,因为它们不包含动态参数,且内容固定,有助于搜索引擎理解页面内容,从而提升关键词排名。 6. **部署与配置**:实现织梦tag标签静态化需要进行一些设置...

    MP3 Tag 修改器

    6. **预览与确认**:在实际修改前,软件通常会提供预览功能,让用户确认修改内容无误后再进行保存。 7. **导出与导入**:有时用户可能需要备份或迁移Tag信息,此功能可以将Tag信息导出为文本或XML文件,便于保存和...

    自动换行Tag

    在Android开发中,有时我们需要创建一个可自定义的标签(Tag)视图,允许标签自动换行以适应屏幕空间。这个“自动换行Tag”功能通常用于显示一组分类标签,如文章主题、产品标签等。这里我们将探讨如何实现这样一个...

    Pool tag 内存泄露监测工具

    它通常发生在程序运行时,程序申请了内存后未正确释放,导致已分配的内存无法再被系统使用。随着时间的推移,未释放的内存会逐渐累积,影响系统性能,甚至可能导致系统崩溃。因此,一个高效的内存泄露监测工具对于...

    高分辨率tag36h11

    在IT领域,尤其是在计算机视觉和机器人定位导航中,标记(Markers)是一种常用的技术,它们能够帮助设备识别特定的位置或者执行特定的操作。其中,Apriltag是这类标记系统的一个著名实现,由美国麻省理工学院(MIT)...

    java仿google模糊搜索框jsp的tag标签通用查询功能

    5. **前端展示**:Tag标签接收到响应后,动态更新页面,展示搜索建议。这通常会涉及到JavaScript和DOM操作。 为了使用这个Tag标签,你需要遵循以下步骤: 1. **引入Tag库**:在JSP页面头部通过`<%@ taglib ... %>`...

    flash-tag.rar_flash tagcloud_js tagCloud_tagCloud_tagcloud.s_tag

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

    apriltag_ros包

    "apriltag_ros"包是ROS (Robot Operating System)生态系统中的一个重要组件,它主要用于目标检测和追踪,特别是针对Apriltag标记的识别。Apriltag是一种开源的视觉定位系统,由麻省理工学院的Robotics Group开发,...

    自己收藏的精美 tag 标签样式

    在IT领域,尤其是在网页设计和开发中,"tag 标签样式"是一个重要的概念,它涉及到用户界面(UI)的设计美学以及用户体验(UX)的优化。Tag标签通常用于分类、标记或者过滤内容,例如博客文章的关键词或者产品分类。...

Global site tag (gtag.js) - Google Analytics