基于lucene的站内搜索引擎的设计实现论文内容摘要:
E和数据库功能的比较 LUCENE全文索引引擎 数据库 匹配效果 通过词元 (term)进行匹配,通过语言分析接口的实现,可以实现对中文等非英语的支持 使用: like %% 会把 herlands也匹配出来, 多 个 关 键 词 的 模 糊 匹 配 : 使 用 like %%% : 就 不 能 匹 配 词 序 颠 倒 的.. 匹配度 有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。 没有匹配程度的控制:比如有记录中 出现 5次 和出现 1次的,结果是一样的 结果输出 通过特别的算法,将最匹配度最高的头 100 条结果输出,结果集是缓冲式的小批量读取的。 返回所有的结果集,在匹配条目非常多的时候(比如上万条)需要大量的内存存放这些临时结果集 可定制性 通 过不同的语言分析接口实现,可以方便的定制出符合应用需要的索引规则(包括对中文的支持) 没有接口或接口复杂,无法定制 结论 高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大 使用率低,模糊匹配规则简单或者需要模糊查询的资料量少 毕业论文 第 7 页 表 LUCENE和其它全文检索系统区别 LUCENE 其他开源全文检索系统 增量索引和批量索引 可以进行增量的索引 (Append),可以对于大量数 据进行批量索引,并且接口设计用于优化批量索引和小批量的增量索引 很多系统只支持批量的索引,有时数据源有 一点增加也需要重建索引。 数据源 LUCENE没有定义具体的数据源,而是一个文档的结构,因此可以非常灵活的适应各种应用(只要前端有合适的转换器把数据源转换成相应结构), 很多系统只针对网页,缺乏其他格式文档的灵活性。 索引内容抓取 LUCENE的文档是由多个字段组成的,甚至可以控制那些字段需要进行索引,那些字段不需要索引,近一步索引的字段也分为需要分词和不需要分词的类型需要进行分词的索引,比如:标题,文章内容字段 , 不需要进行分词的索引,比如:作者 /日期字段 缺乏通用性,往往将文档整个索引了 语言分析 通过语言分析器的不同扩展实现: 可以过滤掉不需要的词: an the of 等, 西文语法分析:将 jumps jumped jumper都归结成 jump进行索引/检索 非英文支持:对亚洲语言,阿拉伯语言的索引支持 缺乏通用接口实现 查询分析 通过查询分析接口的实现,可以定制自己的查询语法规则:比如: 多个关键词之间的 + and or关系等 并发访问 能够支持多用户的使用 毕业论文 第 8 页 全文检索和数据库应用最大的不同在于:让最相关的头 100 条结果满足 98%以上用户的需求 LUCENE 的创新之处: 大部分的搜索 (数据库)引擎都是用 B 树结构来维护索引,索引的更新会导致大量的 IO 操作, LUCENE 在实现中,对此稍微有所改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。 LUCENE 简介 LUCENE 不是一个完整的全文索引应用,而是是一个用 Java 写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引 /检索功能。 LUCENE 的作 者: LUCENE 的贡献者 Doug Cutting 是一位资深全文索引 /检索专家,曾经是 VTwin 搜索引擎 (Apple 的 Copland 操作系统的成就之一 )的主要开发者,后在Excite 担任高级系统架构设计师,目前从事于一些 INTERNET 底层架构的研究。 他贡献出的 LUCENE 的目标是为各种中小型应用程序加入全文检索功能。 LUCENE 的发展历程:早先发布在作者自己的 ,后来发布在SourceFe , 2020 年年底成为 APACHE 基金会 jakarta 的一个子项目: 已经有很多 Java 项目都使用了 LUCENE 作为其后台的全文索引引擎,比较著名的有: Jive: WEB 论坛系统; Eyebrows:邮件列表 HTML 归档 /浏览 /查询系统,本文的主要参考文档 “TheLUCENE search engine: Powerful, flexible, and free”作者就是 EyeBrows系统的主要开发者之一,而 EyeBrows 已经成为目前 APACHE 项目的主要邮件列表归档系统。 Cocoon:基于 XML 的 web 发布框架,全文检 索部分使用了 LUCENE。 Eclipse:基于 Java 的开放开发平台,帮助部分的全文索引使用了 LUCENE 对于中文用户来说,最关心的问题是其是否支持中文的全文检索。 但通过后面对于LUCENE 的结构的介绍,你会了解到由于 LUCENE 良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。 毕业论文 第 9 页 LUCENE 的应用、特点及优势 作为一个开放源代码项目, LUCENE 从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中 去,以及构建 Web 应用,甚至某些商业软件也采用了 LUCENE 作为其内部全文检索子系统的核心。 apache 软件基金会的网站使用了 LUCENE 作为全文检索的引擎, IBM 的开源软件 eclipse 的 版本中也采用了 LUCENE 作为帮助子系统的全文索引引擎,相应的IBM 的商业软件 Web Sphere 中也采用了 LUCENE。 LUCENE 以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。 LUCENE 作为一个全文检索引擎,其具有如下突出的优点: 索引文件格式独立于应用平台。 LUCENE 定义了一套以 8 位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。 在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。 然后通过与原有索引的合并,达到优化的目的。 优秀的面向对象的系统架构,使得对于 LUCENE 扩展的学习难度降低,方便扩充新功能。 设计了独立于语言和文件格式的文本分析接口,索引器通过接受 Token 流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。 已经默认实现了一套强大的查 询引擎,用户无需自己编写代码即使系统可获得强大的查询能力, LUCENE 的查询实现中默认实现了布尔操作、模糊查询( Fuzzy Search)、分组查询等等。 6 、 LUCENE 数据格式兼容 性。 即用 Java LUCENE 生成的索引,能被 C 读出来,反之亦然 面对已经存在的商业全文检索引擎, LUCENE 也具有相当的优势。 首先,它的开发源代码发行方式(遵守 Apache Software License),在此基础上程序员不仅仅可以充分的利用 LUCENE 所提供的强大功能,而且可以深入细致的学习到全文检索引擎制作 技术和面相对象编程的实践,进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。 在这一点上,商业软件的灵活性远远不及 LUCENE。 其次, 毕业论文 第 10 页 LUCENE 秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在 LUCENE 的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到 HTML、 PDF 等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于 LUCENE 恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。 最后,转移到 apache 软件基金会后,借助于 apache 软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。 最后,虽然 LUCENE 使用 Java 语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如 . framework),在遵守 LUCENE 索引文件格式的基础上,使得 LUCENE 能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。 互联网 搜索引擎 的研究 当今的搜索引擎大多采用集中式的搜索方式。 所谓集中式 就是通过很多服务器把网络资源全部下载到本地,然后做一些处理,为搜索做准备。 搜索引擎结构大致分为 : 搜索器、索引器和检索器等几部分组成。 搜索器就是人们所说的网络蜘蛛 (Web Spider)或者叫网络机器人。 通过这种 Spider 程序,可以从一个网页出发,通过提取其中的 URL,在遵从 Robot Exclusion 协议的前提下,不断地提取得到的 URL,并且下载本 URL 的资源;而索引器的主要工作则是利用下载的网络资源,提取索引项,用于生成文档库的索引表;检索器主要是通过理解用户的查询需求,在文档库中检索出文档并且进行快 速匹配,然后进行相关性排序,通过链接网页提供给用户检索结果。 至此,完成搜索。 这样就可以知道 :只要 LUCENE+”蜘蛛爬虫 ”+”网页相关度排名 ”,就可以成为一个真正意义上的搜索引擎,事实上 LUCENE 的创始人 Doug Cutting 已经开发了一个叫做 ”Nutch”的搜索引擎系统了,这个系统加上了“蜘蛛程序”可以对整个 Inter 的网页进行搜索, Nutch 具体的 逻辑 关系图如下: 毕业论文 第 11 页 图 Nutch 逻辑关系图 真正的搜索引擎在搜索的时候就是和 LUCENE 采用一样的原理 :在 Index 中遍历所有的Segments 目录。 而且一般中文分词也都是采用 LUCENE 的中文分词方法。 中文分词的简单介绍 切词 [5]对于搜索结果来说是十分重要的环节,对于英文 ,只用关注空格即可实现切词,而对于中文,由于中文词汇非常丰富,词语的组成十分不固定,所以中文切词就变得比较困难。 现在比较普遍的是中文单字切词、双字切词、字典切词,对于单字切词由于其一开始的不准确性就被很多人放弃,最准确的切词方法应该是字典切词,匹配方法大致有前向匹配、后向匹配和基于 统计的匹配。 举例来说,对于“中华人民”这句话,单字切词就是把这四个字一个作为一个 词索引,搜索的时候逐字匹配,而双字索引是把这句话依次按两个字加以区分,分为“中华”,“华人”,“人民”这样切词。 字典切词则是相对于词库来寻找哪个应该作为词,而哪个不是,由此也可以知道,字典切词是比较准确的,但是由于汉语词语的不断变化和扩充性,所以现在还要结合双字切词才 可以更好地提高准确度。 由于字典切词和双字切词的配合使用,搜索 的匹配精度在很大程度上是可以得到保证的, LUCENE 的切词方 法,通过程序集 来实现。 毕业论文 第 12 页 系统结构 LUCENE 系统结构组织 LUCENE 作为一个优秀的全文检索引擎 [3],其系统结构具有强烈的面向对象特征。 首先是定义了一个与平台无关的索引文件格式,其次通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现,此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终达成了一个低耦合高效率,容易二次开发的检索引擎系统。 以下将讨论 LUCENE 系统的结构组织,并给出系统结构与源码组织图: 图 系统结构与源码组织结构图 数据流分析 理解 LUCENE 系统结构的另一个方式是 去探讨其中数据流的走向,并以此摸清楚LUCENE 系统内部的调用时序。 在此基础上,我们能够更加深入的理解 LUCENE 的系统结构组织,以方便以后在 LUCENE系统上的开发工作。 这部分的分析,是深入 LUCENE系统的钥匙,也是进行重写的基础。 毕业论文 第 13 页 LUCENE 系统中的主要的数据流以及它们之间的关系图: 图 数据流图 图 很好的表明了 LUCENE 在内部的数据流组织情况,并且沿着数据流的方向我们也可以对与 LUCENE 内部的执行时序有一个清楚的了解。 现在将图中的涉及到的流的类型与各个逻辑对应系统的相 关部分的关系说明一下。 图中共存在 4 种数据流,分别是文本流、 token 流、字节流与查询语句对象流。 文本流表示了对于索引目标和交互控制的抽象,即用文本流表示了将要索引的文件,用文本流向用户输出信息;在实际的实现中, LUCENE 中的文本流采用了 UCS2 作为编码,以达到适应多种语言文字的处理的目的。 Token 流。基于lucene的站内搜索引擎的设计实现论文
相关推荐
等。 但这样的系统如果不做任何的系统改造很难达到最佳的控制效果,比如快速性稳定性准确性等。 为了达到最佳的控制效果,我们在闭环系统的中间加入 PID 控制器并通过调整 PID 参数来改造系统的结构特性,使其达到理想的控制效果。 PID 控制简介 当今的自动控制技术都是基于反馈的概念。 反馈理论的要素包括三个部分:测量、比较和执行。 测量关心的变量,与期望值相比较,用这个误差纠正调节控制系统的响应
CCS工程。 CCS 平台的所有特性,包括编辑工具、编译链接、调试工具、代码压缩以及工程管理等等,都可以调用,帮助设计者随意地使用 MATLB、 Simulink、RealTime Workshop 以及硬件,利用 CCS 工程自动地编译、链接,将生成的可执行文件下载到 C67XX 芯片。 一般设计流程如图 2 所示。 图 基于 Simulink 与 C6000 Developer’s Kit
它们的调制解调原理,跟踪分析了各个环节对调制性能的影响及仿真模型的可靠性。 最后,在仿真的基础上分析比较了各种调制系统的误码率、信号传输速率,证明了仿真模型的可行性。 关键词 : 调制解调。 仿真。 Matlab。 Simulink。 Simulation Design for Modem Moudle Based on Matlab Abstract: Modem technology is
流调速系统中显示出很好的应用前景。 基于模糊逻辑或人 工神经网络的控制系统具有更好的负载扰动及非线性参数变化的鲁棒性,并且无需依赖数学模型的设计。 模糊逻辑己经广泛应用于传动系统的速度工艺控制、这些新型智能控制理论与方法已在同步电机变频调速系统的模型参数辨识和自学习、自调整技术中得到应用。 近年来,随着计算机技术的迅速发展,在电气传动技术领域引起一场变革
郑州大学西亚斯国际学院毕业设计说明书 基于 Linux的局域网服务器的架设与应用 1 绪 论 全球范围内 Linux 的发展状况让人鼓舞,从全球来看 Linux 的增长是非常快的。 目前,全球 Linux 市场超过 70 亿美元。 从整个操作系统的市场来看, Linux 的增长比其他操作系统都来得更加快。 而中国比全球的增长更显得快,从大致的增长率来看,全球大概是 9%13%的增长率,在中国,
点,因此有人也称之为八段式发光二极管。 图 . 数码管外形图及阴阳两极连接示意图 如图 所示,数码管由 8 个发光段(第八段表示小数 点)的不同组合,从而实现十进制数的显示。 通过段选端可以控制数码管显示内容,位选端用于控制整个数码管是否工作:对于共阴极数码管,位选端要接低电平,对于共阳极数码管,位选端接高电平。 数码管有两种显示方式:动态显示和静态显示。