研究Lucene的源码
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,是简单而功能强大的基于Java的搜索库。它可以用于任何应用程序来搜索功能。它是可扩展的,高性能的库用于索引和搜索几乎任何类型的文本。虽然,可能现在Lucene用得不多研究,但是挺多的引擎是基于Lucene实现的,所以研究其源码的设计模式还是有必要的。
前期的准备工作
如果不使用配置好依赖的maven项目来运行代码,而使用普通的java项目来运行代码(网上找有关Lucene的案例试着运行),那就需要在Lucene的官网下载整一套的jar包和源代码(注意单单下载jar包是不能看源码的,所以要单独再下载源码,然后使用eclipse把源码关联到jar包),运行案例,发现不同版本的jar包,一些类或方法的使用方法不太一样,例如,Lucene5.0.0版本以上的FSDirectory的open(Path path)方法,传参是Path类型。而Lucene5.0.0版本以下的open方法的传参是File类型,兼顾旧版本的做法是使用toPath()方法把File的对象转成Path对象。有的例子中还使用了HWPFDocument类、Workbook类等,需要下载jxl.jar等jar包,总的来说就是需要哪些jar包就下载哪些jar包。
首先要理清楚使用Lucene组件的步骤,其作用是全文检索,所以先要创建文件相关的索引,然后根据通过索引查询相关文档。Lucene实现全文检索的流程如下图所示。
(1) 抽象父类模式
Lucene组件中大量地使用了抽象父类的模式,例如在Directory类、DataInput类、DirectoryReader类等类中都有应用。下面以Directory类为例子分析。
对创建和查询等对索引进行操作时使用的Directory类或其子类进行分析可