您好,欢迎来到刀刀网。
搜索
您的当前位置:首页基于Lucene的索引系统分析和研究

基于Lucene的索引系统分析和研究

来源:刀刀网
zOl0年第18期 内蒙古石油化工 7 基于Lucene的索引系统分析和研究 车庆男 (大庆油田有限责任公司第三采油厂,黑龙江大庆163318) 摘 要:本文从Lucene索引系统结构出发,分析了常用的索引相关技术,分析其优点及可扩展性。 最后总结出索引系统需要关注哪些质量属性,说明了分布环境下的索引系统工作原理。Lucene的目的 是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此 为基础建立起完整的全文检索引擎。Lucene作为开源搜索引擎的领头羊,在全文检索,分词技术,索引 建立等方面发挥了积极的促进作用。本文介绍的索引技术的实际应用可推广至许多其它的应用实例的 设计与实现中,从而实现对目标文档的检索管理,提高检索效率。 关键词:搜索引擎;Lucene}索引系统}阂值 中图分类号:TP39:G353.2 文献标识码:A 文章编号:1OO6~7981(2010)18一OOO7—02 1搜索引擎与索引系统 ③提供丰富而又强大的查询实现。 随着互联网技术的快速发展,搜索引擎技术越 来越被大多数人所熟知和使用。从2008年中国互联 网中心发布的报告显示,搜索引擎已经成为即电子 邮件,即时通信,新闻浏览的第四大应用。目前根据 搜索引擎的工作原理大致可以分为: 全文搜索引擎:全文检索引擎会主动对互联网 的信息进行抓取,对网页的内容进行全文扫描并对 这些内容进行评分,从而形成一个强大的信息索引  5l ’ ” 库。全文搜索引擎会在一定时间内主动对索引进行 图1 Lucene软件架构 更新,即重新对已有网站的内容进行抓取。 Lucene共分为5个子系统,分别是:Corpus(语 目录索引搜索引擎:目录索引搜索引擎拥有一 料库)、Analysis(解析)、Index(索引)、Storage(存 个大而全的目录体系。被搜索的网站必须符合该类 储)、Search(搜索)。每一子系统从逻辑上又可以再 搜索引擎的规则才能被这类搜索引擎所“捕获”。 划分为2部分:交互协议部分与具体实现部分。我们 元搜索引擎:元搜索引擎又叫做“后搜索引擎”, 只对其中的索引(Index)系统进行详细分析。 也可以叫做“聚类搜索引擎”,因为这类搜索引擎是 3 Lucene索引系统架构 建立在前两种搜索引擎之上的,所以这类搜索引擎 Lucene索引系统提供2种访问协议。一种为搜 把用户输入的内容先转到其他搜索引擎上进行搜 索提供访问,另一种协议为维护索引提供服务。使用 索,然后整合各个搜索引擎返回的信息进行筛选,提 Lucene创建索引时,需要对文本内容建立索引;而 供提取后或挖掘出的优质结果给用户。 对索引维护也可以通过该接口访问索引,更新索引 可以说,无论哪种搜索引擎都无法离开索引的 信息,优化索引。对比全文扫描、签名文件、后缀树等 支持。由此可见,索引系统是操作引擎的关键部分之 搜索建构,Lueene提供准确快速的查询,采用倒排 一。搜索引擎将捕获数据过滤后,索引系统就对得到 文件作为它的索引结构。 的文本进行索引,生成大量的倒排数据。之后前台服 在Lucene中采用段索引的生成方式,如图2所 务器会直接利用用户的搜索词到索引系统里进行查 示。合并阈值影响着内存与硬盘中索引文件的个数, 询,最终返回结果。而索引的编排和聚类往往极大影 每添加一个文档(document)将生成单一段索引 响搜索引擎的反应速度和用户体验。本文将通过对 (single segment index)被内存持有,当单一段索引 开源检索系统Lucene的介绍来讲述索引系统的架 的个数超过合并阈值时,就会通过合并的过程将单 构。 一段索引合并为段索引(segment index)。段索引的 2 Lucene介绍 个数超过合并阈值时也会触发合并过程,合并为一 Lucene并不是一个完整的全文检索应用,但却 个索引。单一段索引,段索引,索引文件格式(file 是一个可靠性高、易于扩展的全文检索工具包,可以 format)是相同的,三者只是规模不同。 被嵌入到各种应用中,为应用提供全文检索功能。 gucene是Apache的一级项目,而且版本更新很快, 可以到http://lucene.apache.org上及时了解  I jLucene的进展情况。  I j { ,Lucene其具有如下突出的优点: 、} ①自定义的索引文件格式,使得Lucene可以很 容易的被嵌入到应用系统中,并部署在不同的平台 I f 上。 ②使用MDA(注:Model Driven Architecture, 图2索引建立过程 模型驱动体系架构,是由0MG提出的新的软件方 使用如下代码建立一个非复合式索引: 法学)规则设计,使得Lucene易于扩展。 public void buHdlndex(String indexDir) 收稿日期:2O1O—O5—18 作者简介:车庆男(1982--),男, ̄Jk-r黑龙江大学,助理工程师,从事预算工作。 8 内蒙古石油化工 2010年第18期 throws IOException{ IndexWriter writer—new IndexWriter(in— dexDir,new StandardAnalyzer(),true); writer.setUseCompoundFile(false);//采用非 复合式索引 writer.setMergeFactor(2); Document doeOne—new Document(); doeOne.add(new Field(”Title1”, term1 term term ,Field.Store.YES,Field.Index.TO— KENIZED)); writer.addDocument(docOne)} Document docTWO—new Document()l doeTWO.add(new Field( Title1”,”term term。 term 。Field.Store.YES, Field.Index.TOKENIZED))1 writer.addDocument(doeTWO); writer.close(), ) 执行代码之后,Lucene生成如下文件: 图3 Lueene建立的非复合式索引文件 如果采用复合索引形式的话,图3中的那些文 件名中带~N的文件就会聚合成一个.cfs文件。下 图就是采用复合索引模式执行的结果: 图4 LuceneLucene建立的复合式索引文件 图5各个索引文件之间的关系 4索引系统质量属性 Lucene在建立索引的过程中,有很多管理属性 影响着索引的建立速度,索引的搜索速度等。因此需 要考虑索引更新这一问题,包括:内存中保存的索引 与磁盘中保存的索引的结构一致性I更新索引的策 略:即时添加索引和定时添加索引。子单个计算机而 言,索引更新后会合并为一个索引文件,磁盘中文件 的数目会少一些,查询过程中打开文件的操作也会 减少,这样可缩短查询响应时间,但是频繁的更新索 引(在更新时,一般索引更新的计算机会暂停查询, 防止对索引的读写冲突)会使得系统的实时性能下 降,所以选择适当的索引更新时机很重要。对于分布 式的索引文件系统而言,更新过程需要考虑的情况 也会更加的复杂。 索引合并阈值的设定是影响索引建立速度的主 要因素之一,如果没有达到阈值,各段索引并不合 并。如果这个阈值比较小,在生成索引时使用的内存 比较小,查询(Lucene的优化过程也合并索引)索引 较快(索引文件个数少),但是生成索引的速度慢(频 繁的合并索引,浪费时间)。如果设定了较大的阈值, 查询速度慢(文件数量多,I/o操作多),但是生成索 引的速度快(不是频繁的合并索引,在内存中大批量 合并),在Lucene中这个阈值默认设定为1o,这个数 值可以更改但必须大于2。 选择合适的索引建立方式也是影响索引效率的 重要因素之一。Lucene的索引系统的索引形式主要 有两种:“复合式索引”和“非复合式索引”。使用复合 式索引的优点是可以减少文件的Io操作。而非复合 式索引的优点是索引建立速度快,聚类方法简单,容 易在系统中实现。因此对于一些经常被访问同时更 新概率较小的索引,应该以建立复合式索引为主,而 对于一些频繁更新的索引,应该采用非复合式索引 为主。 5分布环境下的索引系统 当一个索引越来越大。达到一个单一的系统无 法满足磁盘需求的时候,或者一次简单的查询实在 要耗费很多的时间的时候,就可以使用分布式索引 了。 Lucene本身并不支持分布式索引,因此我们必 须引入第三方工具来使Lueene支持分布式索引。 Solr是一套适合建立分组式分布索引的开源组件。 : ̄Solr中,原来的大索引,将会分成多个小索引 (索引并不定规模小,之前称之为小索引相对于之前 的整个索引来讲的),Solr可以将从这些小索引返回 的结果合并,然后返回给客户端。 每个小索引,都有可能既接收顶级的查询请求, 也向其他的小索引发出次级的查询请求。在这里需 要注意的是,服务器中设置的能够处理的请求的线 程数一定要大于这个小索引所接收到的顶级请求 和次级请求的总和。否则一个由分发而产生的死锁 很有可能会发生。 现在我们来试想下一种最简单的情况,只有两 个小索引,每个小索引只能够起一个线程来处理请 求。两个索引都能接收顶级请求,并将请求分发给另 一个索引。因为它们没有多余的线程可以处理多于 一个的请求,所以Web容器就会阻塞刚来的请求, 这种情况一直持续到正在处理的请求被处理完毕。 这样造成的索引死锁可以通过线程超时的方法 进行解决,具体解决办法这里将不进行详细论述。 6总结 基于对Lucence的索引系统的分析得到以下结 论: ①索引文件系统应该于应用平台,使得兼 容系统或者不同平台的应用能够共享建立的索引文 件; ②索引文件系统应该采用倒排索引、分块索引 提升索引速度; ⑧索引文件系统应该采用优秀的面向对象的系 统架构便于扩展} ④索引文件系统应该设计于语言和文件格 式的文本分析接口便于扩展。 [参考文献] [1] 索红光.针对中文检索的Lucene改进策略 EJ].计算机应用与软件,2009,(6). [2] 白坤.基于Lucene/Heritrix的垂直搜索引擎 的研究与应用[J].计算机应用与软件,2009, (1). [3] 邱哲,符滔滔.开发自己的搜索引擎一一 Lueene 2.0+HeritrixEM3.人民邮电出版 社,2007. [43 (美)0tis Gospodnetic}Erik Hatcher.Lucene in Action[M].Manning Publications,2007. E53吴众欣,沈家立.Lucene分析与应用EM].机 械工业出版社,2008. 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务