初识 Lucene .
Lucene是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 ApacheJakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。
目前已经有很多应用程序的搜索功能是基于Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene能够几乎适用于所有的搜索应用程序。
索引和搜索
索引是现代搜索引擎的核心,建立索引的过程就是把源数据处理成非常方便查询的索引文件的过程。为什么索引这么重要呢,试想你现在要在大量的文档中搜索含有某个关键词的文档,那么如果不建立索引的话你就需要把这些文档顺序的读入内存,然后检查这个文章中是不是含有要查找的关键词,这样的话就会耗费非常多的时间,想想搜索引擎可是在毫秒级的时间内查找出要搜索的结果的。这就是由于建立了索引的原因,你可以把索引想象成这样一种数据结构,他能够使你快速的随机访问存储在索引中的关键词,进而找到该关键词所关联的文档。Lucene采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词 / 短语表,对于这个表中的每个词 /短语,都有一个链表描述了有哪些文档包含了这个词 / 短语。这样在用户输入查询条件的时候,就能非常快的得到搜索结果。我们将在本系列文章的第二部分详细介绍Lucene 的索引机制,由于 Lucene 提供了简单易用的 API,所以即使读者刚开始对全文本进行索引的机制并不太了解,也可以非常容易的使用 Lucene对你的文档实现索引。
对文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。
Lucene 软件包分析
Lucene软件包的发布形式是一个 JAR 文件,下面我们分析一下这个 JAR 文件里面的主要的 JAVA 包,使读者对之有个初步的了解。
Package:org.apache.lucene.document
这个包提供了一些为封装要索引的文档所需要的类,比如Document, Field。这样,每一个文档最终被封装成了一个 Document 对象。
Package:org.apache.lucene.analysis
这个包主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。
Package:org.apache.lucene.index
这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类:IndexWriter和 IndexReader,其中 IndexWriter 是用来创建索引并添加文档到索引中的,IndexReader 是用来删除索引中的文档的。
Package:org.apache.lucene.search
这个包提供了对在建立好的索引上进行搜索所需要的类。比如IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法,Hits 用来保存搜索得到的结果。
一个简单的搜索应用程序
假设我们的电脑的目录中含有很多文本文档,我们需要查找哪些文档含有某个关键词。为了实现这种功能,我们首先利用Lucene 对这个目录中的文档建立索引,然后在建立好的索引中搜索我们所要查找的文档。通过这个例子读者会对如何利用 Lucene构建自己的搜索应用程序有个比较清楚的认识。
建立索引
为了对文档进行索引,Lucene提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer,Directory。下面我们分别介绍一下这五个类的用途:
Document
Document是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。一个 Document 对象由多个 Field对象组成的。可以把一个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。
Field
Field对象是用来描述一个文档的某个属性的,比如一封电子邮件的标题和内容可以用两个 Field 对象分别描述。
Analyzer
在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的 Analyzer。Analyzer把分词后的内容交给 IndexWriter 来建立索引。
IndexWriter
IndexWriter 是 Lucene用来创建索引的一个核心的类,他的作用是把一个个的 Document 对象加到索引中来。
Directory
这个类代表了 Lucene的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是RAMDirectory,它表示一个存储在内存当中的索引的位置。
熟悉了建立索引所需要的这些类后,我们就开始对某个目录下面的文本文件建立索引了,清单1 给出了对某个目录下的文本文件建立索引的源代码。
http://www.houzz.com/ideabooks/42838481
http://www.houzz.com/ideabooks/42836780
http://www.houzz.com/ideabooks/42836879
http://www.houzz.com/ideabooks/42836931
http://www.houzz.com/ideabooks/42836983
http://www.houzz.com/ideabooks/42837028
http://www.houzz.com/ideabooks/42837154
http://www.houzz.com/ideabooks/42837207
http://www.houzz.com/ideabooks/42837431
http://www.houzz.com/ideabooks/42837480
http://www.houzz.com/ideabooks/42837554
http://www.houzz.com/ideabooks/42837589
http://www.houzz.com/ideabooks/42837262
http://www.houzz.com/ideabooks/42837301
http://www.houzz.com/ideabooks/42837371
http://www.houzz.com/ideabooks/42837668
http://www.houzz.com/ideabooks/42837705
http://www.houzz.com/ideabooks/42837765
http://www.houzz.com/ideabooks/42837818
http://www.houzz.com/ideabooks/42837851
http://www.houzz.com/ideabooks/42837950
http://www.houzz.com/ideabooks/42837988
http://www.houzz.com/ideabooks/42838019
http://www.houzz.com/ideabooks/42838047
http://www.houzz.com/ideabooks/42838139
http://www.houzz.com/ideabooks/42838203
http://www.houzz.com/ideabooks/42838264
http://www.houzz.com/ideabooks/42838308
http://www.houzz.com/ideabooks/42838357
http://www.houzz.com/ideabooks/42838424
http://www.houzz.com/ideabooks/42838530
http://www.houzz.com/ideabooks/42838597
http://www.houzz.com/ideabooks/42838643
http://www.houzz.com/ideabooks/42838710
http://www.houzz.com/ideabooks/42838746
http://www.houzz.com/ideabooks/42838820
http://www.houzz.com/ideabooks/42838996
http://www.houzz.com/ideabooks/42839110
http://www.houzz.com/ideabooks/42839223
http://www.houzz.com/ideabooks/42839401
http://www.houzz.com/ideabooks/42839507
http://www.houzz.com/ideabooks/42839648
http://www.houzz.com/ideabooks/42839778
http://www.houzz.com/ideabooks/42839901
http://www.houzz.com/ideabooks/42840035
http://www.houzz.com/ideabooks/42840137
http://www.houzz.com/ideabooks/42840226
http://www.houzz.com/ideabooks/42723953
http://www.houzz.com/ideabooks/42732104
http://www.houzz.com/ideabooks/42732193
http://www.houzz.com/ideabooks/42732291
http://www.houzz.com/ideabooks/42732360
http://www.houzz.com/ideabooks/42732451
http://www.houzz.com/ideabooks/42732547
http://www.houzz.com/ideabooks/42732638
http://www.houzz.com/ideabooks/42732745
http://www.houzz.com/ideabooks/42732814
http://www.houzz.com/ideabooks/42732868
http://www.houzz.com/ideabooks/42732947
http://www.houzz.com/ideabooks/42732992
http://www.houzz.com/ideabooks/42733021
http://www.houzz.com/ideabooks/42733060
http://www.houzz.com/ideabooks/42733104
http://www.houzz.com/ideabooks/42733138
http://www.houzz.com/ideabooks/42733170
http://www.houzz.com/ideabooks/42733558
http://www.houzz.com/ideabooks/42733609
http://www.houzz.com/ideabooks/42733661
http://www.houzz.com/ideabooks/42733708
http://www.houzz.com/ideabooks/42733761
http://www.houzz.com/ideabooks/42733821
http://www.houzz.com/ideabooks/42733942
http://www.houzz.com/ideabooks/42734025
http://www.houzz.com/ideabooks/42737707
http://www.houzz.com/ideabooks/42737837
http://www.houzz.com/ideabooks/42737924
http://www.houzz.com/ideabooks/42738032
http://www.houzz.com/ideabooks/42738115
http://www.houzz.com/ideabooks/42738186
http://www.houzz.com/ideabooks/42738232
http://www.houzz.com/ideabooks/42738282
http://www.houzz.com/ideabooks/42738282
http://www.houzz.com/ideabooks/42738355
http://www.houzz.com/ideabooks/42738389
http://www.houzz.com/ideabooks/42738420
http://www.houzz.com/ideabooks/42738461
http://www.houzz.com/ideabooks/42738492
http://www.houzz.com/ideabooks/42738526
http://www.houzz.com/ideabooks/42738568
http://www.houzz.com/ideabooks/42738612
http://www.houzz.com/ideabooks/42738635
http://www.houzz.com/ideabooks/42738684
http://www.houzz.com/ideabooks/42738721
http://www.houzz.com/ideabooks/42738769
http://www.houzz.com/ideabooks/42738802
http://www.houzz.com/ideabooks/42738833
http://www.houzz.com/ideabooks/42738871
http://www.houzz.com/ideabooks/42738904
http://www.houzz.com/ideabooks/42738947
http://www.houzz.com/ideabooks/42738976
http://www.houzz.com/ideabooks/42739019
http://www.houzz.com/ideabooks/42739068
http://www.houzz.com/ideabooks/42739100
http://www.houzz.com/ideabooks/42739142
http://www.houzz.com/ideabooks/42739166
http://www.houzz.com/ideabooks/42739184
http://www.houzz.com/ideabooks/42740033
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。