一、简介
Apache Lucene(TM) is a high-performance, full-featured text searchengine library written entirely in Java. It is a technology suitable for nearlyany application that requires full-text search, especially cross-platform.
Apache Lucene is an open source project available for freedownload.
来自百科的介绍
Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
它的优点:
(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
(2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
(4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
(5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。
个人理解:它是一个全文检索的框架,不是现成的产品可以直接就用,要用它还有漫长的工作要做哦。Solr是基于lucene实现的产品,能为企业提供成熟的检索服务,配置一下就能使用。
Lucene指南http://lucene.apache.org/core/
Solr指南http://lucene.apache.org/solr/4_0_0/tutorial.html
二、相关知识点
lucene搜索原理
Lucene搜索具体的实现是两步:对搜索资源建立索引,然后在索引的基础上搜索。Lucene采用的是反向索引机制,通过实现特定API,完成文档建立索引的工作,然后通过特定的类,封装搜索结果,供应用程序处理。
Lucene处理过程
Lucene和应用之间关系
1.1、反向索引的概念
反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射。反向索引通常利用关联数组实现。它拥有两种表现形式:
inverted file index,其表现形式为 {单词,单词所在文档的ID}
full inverted index,其表现形式为{单词,(单词所在文档的ID,在具体文档中的位置)}
具体实例,假设有三个文档:
T0 = "itis what it is"
T1 = "whatis it"
T2 = "itis a banana"
那么,采用invertedfile index方式,结果是:
"a": {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}
采用full inverted index方式,结果是:
"a": {(2, 2)}
"banana": {(2, 3)}
"is": {(0, 1), (0, 4), (1,1), (2, 1)}
"it": {(0, 0), (0, 3), (1,2), (2, 0)}
"what": {(0, 2), (1, 0)}
1.2lucene解析机制
Lucene 使用各种解析器对各种不同类型的文档进行解析。比如对于 HTML 文档,HTML 解析器会做一些预处理的工作,比如过滤文档中的 HTML 标签等等。HTML 解析器的输出的是文本内容,接着 Lucene 的分词器(Analyzer)从文本内容中提取出索引项以及相关信息,比如索引项的出现频率。接着Lucene 的分词器把这些信息写到索引文件中。
三、实践(lucene4.0.0)
Demo地址
http://lucene.apache.org/core/4_0_0/demo/overview-summary.html#Setting_your_CLASSPATH
1、创建maven工程
2、导入依赖jar,pom依赖如下所示
3、工程如下所示
4、运行
原文是这么说的
Once you've gotten this far you're probably itching togo. Let's build an index! Assuming you've set your CLASSPATHcorrectly, just type:
javaorg.apache.lucene.demo.IndexFiles -docs {path-to-lucene}/src
This will produce a subdirectorycalled index which will contain an index of all of the Lucene sourcecode.
To search the index type:
javaorg.apache.lucene.demo.SearchFiles
eclipse里面做法
4.1、工程右键run->Run configuration->new javaapplication选择IndexFiles并设置输入参数
运行结果:
4.2、工程右键run->Run configuration->new javaapplication选择SearchFiles并设置输入参数
运行之后在console中输入搜索关键字可看到检索结果(demo不支持中文分词)
Lucene4还提供了个war包,但有问题,web.xml配置class路径不对, 缺了一个lucene-analyzers-common-4.0.0.jar
备注:
项目由于兼容性的考虑只能用jdk5。。。故只好考虑lucene3.6.1。无语。。。
LuceneJava has the following minimum requirements:
· Java 1.5.x orgreater.
· ANT 1.7.0 or greater.
· CPU, Disk and Memoryrequirements are based on the many choices made in implementing Lucene(document size, number of documents, and number of hits retrieved to name afew.)
IBMJDK会有这个问题,解决办法参考下面链接
http://www.webspherechina.net/?action-blogdetail-uid-14253-id-53453.html