扩展Lucene的索引文件存储.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
扩展Lucene的索引文件存储 本文主要叙述如何通过引入Commons-VFS项目来扩展Lucene的索引文件存储方式。在阅读本文之前,您必须对Lucene有一定的了解,最好是有编写过Lucene代码。另外文章中所提到的Lucene如果不做特殊说明指的是Lucene的Java版本。 使用过Lucene来做为搜索引擎的朋友知道,Lucene默认的使用文件系统来存储索引文件。一般我们需要指定一个路径做为参数来初始化索引的读写类。例如下面语句准备在D盘的lucene_idx目录下写索引信息。 IndexWriter idx_writer = new IndexWriter(“D:/lucene_idx”,new StandardAnalyzer(),false); 因此整个系统的索引一般就会集中在某台服务器的某个目录。为了保证写索引不会产生冲突,经常我们只运行一个负责写索引的进程,其他的应用可以访问索引目录进行查询。当应用程序是集群环境下的不同机器时,其他的机器如何访问到索引服务器上的索引数据目录呢?你肯定已经想到很多种方法来访问其他机器的目录:例如Windows机器可以通过网上邻居;Linux服务器之间可以通过NFS访问;或者Linux和Windows服务器之间可以通过SAMBA来相互访问各自的文件系统。还有没有其他更加灵活的解决方案吗? 当然有,通过扩展Lucene的索引存储接口,你可以通过FTP、HTTP来读写索引文件,你甚至可以将Lucene的索引数据保存在数据库中,虽然我不知道这到底是不是一个好主意,但起码技术上是可行的。 为了使我们对Lucene的扩展有着实际的意义,我们将引入另外一个Apache组织新的开源项目—— Commons-VFS,我们简称为VFS。VFS项目把对各种各样的文件系统的访问封装成统一的应用程序接口,这大大的简化了应用程序本身代码的复杂度。目前VFS支持下面一些文件系统,而这个列表会越来越多,当然你也可以自行进行扩展。 FTP Local Files HTTP and HTTPS SFTP Temporary Files Zip, Jar and Tar (uncompressed, tgz or tbz2) gzip and bzip2 res ram 或许你已经猜出来了引入VFS项目的目的:我们要利用VFS 项目和Lucene结合,使Lucene的索引文件可以存放在VFS所支持的各种可读写的文件系统中。 因此接下来我们的任务就是让Lucene使用VFS来存取索引数据,至于这些数据放在哪里,是放在数据库、文件系统还是其他地方,这个问题就交给VFS的配置去处理了。 你准备好了嘛?下面我们要深入到Lucene的代码中去探个究竟了。首先我们注意到了IndexReader、IndexWriter、IndexSearcher等这几个索引数据的读写类的构造函数都可以接受名为org.apache.lucene.store.Directory 的类做为参数。再查看api文档发现Directory有两个子类分别是:FSDirectory和RAMDirectory,从类名上可以猜出FSDirectory是基于文件系统的,而RAMDirectory是基于内存的。再读一下IndexWriter类的源码后证实了这个猜想,当我们传递路径字符串而不是Directory对象给IndexXxxxx类时,Lucene会初始化一个FSDirectory对象来处理索引数据的读写操作。 而另外一个RAMDirectory类是基于内存的索引数据存取,它是Lucene所提供的第二种索引数据存取方式。它可以接受一个FSDirectory做为构造函数的参数,相当于把存放在磁盘中的索引数据全部加载到内存中,以提高索引搜索的性能,我们暂不理会这种方式。但我们已经了解到org.apache.lucene.store包中的类便是Lucene存储的核心,我们可以通过扩展Directory类来实现存储自定义。姑且把所要扩展的这个类命名为VFSDirectory。 先来看看Directory都有什么方法: Method Summary abstract ?void HYPERLINK file:///C:\\PROJECTS\\OpenSource\\lucene-2.0.0\\docs\\api\\org\\apache\\lucene\\store\\Directory.html \l close%28%29 close() ?关闭存储. abstract ? HYPERLINK file:///C:\\PROJECTS\\OpenSource\\lucene-2.0.0\\docs\\api\\org\\apache\\lucene\\store\\I

文档评论(0)

max + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档