`
greenmoon
  • 浏览: 48670 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于lucene.net的网站标签系统设计

 
阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- [if gte mso 10]> <mce:style><!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} --> <!-- [endif]-->

标签系统是目前网站中比较流行的一种数据分类方式,通过设置在网站文章或贴子上的标签属性,可以向用户立体的多方位的展示信息,其好处是不言而谕的,看看豆瓣、Discuz!、qq空间吧,这里不再赘述。一般来说标签系统需要提供两个功能,第一个当然就是根据标签来搜索了,另一个就是自动从文章提取标签,这个功能可以看看qq空间,Discuz!不支持这个功能,下面就从这两个方面来阐述一下我的设计方案。
自动提取标签功能,分析了qq空间的功能,基本思路是先分词,然后计算每一个词在文章中出现的频率,根据系统中存在的热门标签来计算每一个词的推荐分值,至于公式可以根据自己的需要自己定义,我的公式是:每个词的频率/所有词的频率的和 * 40% + 该词在热门标签中的热度*60%,热度计算公式:每个热门标签的频率/所有热门标签频率的和。经过计算的分值倒叙排序后就可以算出推荐的标签。中文分词的算法有很多种,可以选择lucene自带的分词器,它是基于二分法的,准确率不高,我推荐使用的中科院的免费版,它的准确率和速度都是不错的,代码可以免费得到,我做了些修改:收集了中英文停词,一次性导入词库,删除了所有监控事件,提高效率。热门标签的热度计算可以采用异步形式,每一个小时计算一次,计算结果保存到内存里,计算步骤如下:1、根据数据库保存的标签数据,数据库设计时要保存每个标签和文章的数据对,比如ID,标签。2、分组统计每一个标签出现的次数,按次数倒序排序后,取前1000个。3、以key/value的形式保存到内存,可以hashtable的方式直接保存到当然网站系统内存,也可以保存到memcached中。
建立标签索引,一般来说自动提取的标签多多少少会不符合用户的需要,所以要提供手动修改的功能,符合要求的标签需要被全文索引后才能被搜索,建立索引需要使用lucene提供的IndexWriter类,不过需要我们自己提供标签分词工具,我采用的索引是以逗号分割的,所以自己继承的Analyzer也很简单,直接采用split方法分割就可以了。为了提高标签建立的效率,可以参用先使用RAMDirectory在内存索引在一次性写入磁盘文件的方式,这样效率会提高很多,我测试的,100万条数据的速度可以相差10几倍。
标签查询,查询就简单了,直接采用lucene的语法就可以了,lucene的查询语法可以在官网上查到,支持bool,与、或、非、range等,lucene也可以支持根据字段排序,比如根据时间排序,排序会影响效率,本机测试,带排序的100万条数据需要1.4秒,而不排序只需要70几毫秒,一般我们的用法可以加上时间范围,去一段时间内的数据再排序,这样会提高效率。
综述,使用lucene来查询比使用mysql数据库查询效率会提高很多,在50万条数据以内是毫秒级的,这对一般的小网站已经是足够了,希望这篇文章可以抛砖引玉。

分享到:
评论

相关推荐

    Lucene.Net的DLL

    Lucene.Net的核心目标是实现高性能、可扩展的全文搜索,它广泛应用于网站搜索、内容管理系统、知识库、日志分析等多个领域。 在描述中提到的“快速搜索”是Lucene.Net的关键特性之一。通过高效的倒排索引机制,...

    lucene.net构建搜索引擎ppt

    **标题:“lucene.net构建搜索引擎PPT”** **一、Lucene.NET简介** Lucene.NET是Apache Lucene...以上是构建基于Lucene.NET的搜索引擎的基本流程和关键技术,通过深入学习和实践,您可以构建出高效、精准的搜索系统。

    lucene.net及.net爬虫实现的简单搜索引擎

    《基于Lucene.NET和.NET爬虫的简单搜索引擎构建详解》 搜索引擎是互联网信息时代的关键工具,它能够快速、准确地帮助用户找到所需的信息。本文将深入探讨如何利用Lucene.NET和.NET爬虫技术构建一个简单的搜索引擎,...

    lucene.net 打造全文搜索引擎

    在标签“lucene lucene.net 全文搜索 搜索引擎”中,“lucene”是原始的Java版本,而“全文搜索”和“搜索引擎”进一步强调了Lucene.NET的应用场景,即创建能够搜索大量文本数据的系统。 从文件名称“Lucene.Net”...

    基于ASP.net的企业文件管理系统源码.zip

    5. **搜索功能**:可能采用了全文搜索引擎(如Lucene.NET)或SQL Server的全文搜索,实现对文件内容的快速检索。 6. **版本控制**:为了管理文件的历史版本,系统可能实现了版本控制功能,允许用户查看和恢复旧版本...

    基于.net的bbs论坛系统

    这可能需要用到全文搜索引擎如Lucene.NET,或者集成到数据库的查询优化。 8. **缓存机制**:为了提高性能,论坛系统可能会使用缓存技术,如Redis或内存缓存,来减少对数据库的频繁访问,尤其对于热门帖子和用户信息...

    .net 文档管理系统

    至于搜索功能,可以利用Lucene.NET或Elasticsearch实现全文检索。 在实际应用中,.NET文档管理系统广泛应用于企业、政府、教育等领域,满足了不同组织对文档管理的需求。例如,在企业中,它可以整合各部门的文档...

    毕业设计完整版ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文).zip

    在本毕业设计项目中,开发者使用ASP.NET技术结合Ajax与Lucene库,构建了一个功能完善的搜索引擎。这个项目不仅包含了完整的源代码,还有一份详细的论文,涵盖了设计思想、实现过程和关键技术。以下是对这个项目的...

    ASP.NET视频点播系统的设计与实现(源代码+论文).rar

    5. 搜索功能:提供关键字搜索、分类搜索等,利用搜索引擎技术如Lucene.NET提升搜索效率。 6. 论文部分:通常会包含系统设计的详细描述、架构图、技术选型原因、问题解决策略等内容,有助于理解整个项目的开发过程和...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--data

    在构建一个简单的新闻网站搜索引擎时,SSH(Spring、Struts2和Hibernate)是一个常见的Java Web开发框架组合,而Lucene是Apache开源组织提供的一款强大的全文搜索引擎库。本项目结合了这些技术,实现了分页、排序和...

    ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文).rar

    在本项目中,"ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现"展示了一个结合了ASP.NET、Ajax(异步JavaScript和XML)以及Lucene的搜索引擎实现。这个项目可能包含了从需求分析到系统设计,再到编码实现的全过程,...

    ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文).zip

    在本项目中,"ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现"揭示了一个结合了ASP.NET、Ajax(异步JavaScript和XML)以及Lucene的高级搜索解决方案。 首先,让我们深入了解ASP.NET。ASP.NET提供了丰富的控件、...

    ASP.NET图书管理系统.zip

    这需要熟悉SQL的LIKE操作或者全文搜索技术,如Lucene.NET。 标签“Java”可能是因为ASP.NET和Java在Web开发领域都有广泛的应用,两者都是流行的后端开发技术。虽然本系统是基于ASP.NET实现,但了解Java的相关知识,...

    asp.net知识库源码

    2. 知识分类:通过层次结构或标签系统组织内容,这可能涉及到自定义控件或数据结构的设计。 3. 搜索功能:可能使用全文搜索引擎如Lucene.NET,或者直接查询数据库并应用复杂的过滤条件。 4. 权限控制:确保用户只能...

    ASP.NET下网络音乐库系统(C#)

    系统设计时,可能采用了MVC(Model-View-Controller)架构模式,这种模式将业务逻辑、数据模型与用户界面分离,提高了代码的可维护性和可测试性。控制器处理用户请求,模型负责数据处理,视图则展示结果给用户。 该...

    一个功能强大的C#+ASP.NET实现的博客系统源程序代码

    博客系统的核心功能包括用户管理、文章发布、评论交互、分类管理、标签系统、搜索功能等。在这个项目中,我们可以看到以下几个主要的组件: 1. **用户模块**:用户注册、登录、个人信息管理等功能。这部分可能涉及...

    博客引擎系统 C# .NET

    5. **搜索功能**:通过全文检索技术(如Lucene.NET)实现站内搜索,帮助用户快速找到感兴趣的文章。 6. **社交媒体集成**:支持分享到Facebook、Twitter等社交平台,增加博客的曝光度。 7. **统计分析**:提供访问...

    基于。net的博客系统 论文设计源码

    《基于.NET的博客系统论文设计源码》是一个深入探讨.NET技术在构建博客系统中的应用的实践项目。这个项目不仅提供了理论分析,还包含了完整的源代码,使得开发者能够深入理解并学习到如何使用.NET框架来创建一个功能...

    .net 仿当当网 附数据库

    这涉及到对数据库中的商品信息进行查询,可能需要用到SQL的LIKE、MATCH AGAINST等语句,或者更复杂的全文搜索引擎如Lucene.NET。 3. **分页**:在大型商品列表中,分页是必不可少的,以提高用户体验。.NET提供了...

    深入 Lucene 索引机制深入 Lucene 索引机制

    此外,Lucene还有C#版本的实现,即Lucene.Net。 1.1 Lucene 原理 Lucene的索引机制基于倒排索引,这种技术通过牺牲存储空间来换取快速的检索速度。在索引过程中,Lucene会对输入的文本进行分词,创建一个词项到文档...

Global site tag (gtag.js) - Google Analytics