全文检索系统的结构包括:文本处理引擎,索引引擎,磁盘索引文件,查询引擎,二次应用开发接口。<o:p></o:p>
Lucene是一个开放源代码的全文检索引擎工具包,不是一个完整的全文检索引擎,而是一个全文检索引擎的架构。<o:p></o:p>
成功案例:Eclipse,Jive<o:p></o:p>
<o:p></o:p>
Lucene包结构(七大块)<o:p></o:p>
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><o:p></o:p>
<o:p></o:p>
Lucene的倒排索引算法:<o:p></o:p>
<o:p></o:p>
设有两篇文章1和2
文章1的内容为:Tom lives in <st1:city w:st="on">Guangzhou</st1:city>,I live in <st1:place w:st="on"><st1:city w:st="on">Guangzhou</st1:city></st1:place> too.
文章2的内容为:He once lived in <st1:place w:st="on"><st1:city w:st="on">Shanghai</st1:city></st1:place>.<o:p></o:p>
传统算法:<o:p></o:p>
文章1的所有关键词为:[tom] [live] [guangzhou] [i] [live] [guangzhou]
文章2的所有关键词为:[he] [live] [shanghai]<o:p></o:p>
倒排索引算法:<o:p></o:p>
关键词 文章号[出现频率] 出现位置
guangzhou 1[2] 3,6
he 2[1] 1
i 1[1] 4
live 1[2],2[1] 2,5,2
shanghai 2[1] 3
tom 1[1] 1<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
一、环境<o:p></o:p>
需要导入lucene.jar包(在lucene.apache.org下载)<o:p></o:p>
二、基本概念<o:p></o:p>
1.Lucene的工作流程:<o:p></o:p>
(1) 建立索引:主要使用IndexWriter,在指定的目录建立索引的文件.<o:p></o:p>
IndexWrite几种构造函数<o:p></o:p>
IndexWrite(String str , Analyzer a , Boolean create)<o:p></o:p>
IndexWrite(File f , Analyzer a, Boolean create)<o:p></o:p>
IndexWrite(Directory d , Analyzer a, Boolean create)<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
a.提取文本. Lucene只能对文本信息建立索引,只要你能将要索引的文件转化成文本格式,Lucene 就能为你的文档建立索引。比如,如果你想为 HTML 文档或者 PDF 文档建立索引,那么首先你就需要从这些文档中提取出文本信息,然后把文本信息交给 Lucene 建立索引。<o:p></o:p>
b.构建Document<o:p></o:p>
c.分析并建立索引,在提取了需要Lucene建立索引的数据并且创建了Document之后,接下来就可以调用IndexWrite类的addDocument()方法来使Lucene建立索引了。<o:p></o:p>
(2) 创建搜索的Query
(3 ) 利用IndexSearcher进行搜索<o:p></o:p>
<o:p></o:p>
2.Lucene的字段Field类型<o:p></o:p>
<o:p></o:p>
对于每个Field , Lucene提供了3种方式以供用户选择进行处理,这3种方式分别是“是否切词”,“是否索引”,“是否存储”。<o:p></o:p>
Lucene有四种不同的字段类型:Keyword,UnIndexed,UnStored和Text,用于指定建立最佳索引。<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
字段类型<o:p></o:p>
是否切词<o:p></o:p>
是否索引<o:p></o:p>
是否存储<o:p></o:p>
主要用途<o:p></o:p>
Field.Keyword(String name,String value)<o:p></o:p>
Field.Keyword(String Date)<o:p></o:p>
否<o:p></o:p>
是<o:p></o:p>
是<o:p></o:p>
电话号码,居民身份证,人名,地名,日期等<o:p></o:p>
Field.UnIndexed(String,String)<o:p></o:p>
否<o:p></o:p>
否<o:p></o:p>
是<o:p></o:p>
文档的类型,例如:Word,PDF,HTML<o:p></o:p>
Field.UnStored(String,String)<o:p></o:p>
是<o:p></o:p>
是<o:p></o:p>
否<o:p></o:p>
文档的标题和内容<o:p></o:p>
Field.Text(String,String)<o:p></o:p>
是<o:p></o:p>
是<o:p></o:p>
是<o:p></o:p>
文档的标题和内容<o:p></o:p>
Field.Text(String,Reader)<o:p></o:p>
是<o:p></o:p>
是<o:p></o:p>
否<o:p></o:p>
文档的标题和内容<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
3.基本概念(与传统表的对比):<o:p></o:p>
Lucene<o:p></o:p>
传统表<o:p></o:p>
说明<o:p></o:p>
IndexWriter<o:p></o:p>
table<o:p></o:p>
<o:p></o:p>
Document<o:p></o:p>
一条记录<o:p></o:p>
<o:p></o:p>
Field<o:p></o:p>
每个字段<o:p></o:p>
分为可被索引的,可切分的,不可被切分的,不可被索引的几种组合类型<o:p></o:p>
Hits<o:p></o:p>
RecoreSet<o:p></o:p>
结果集<o:p></o:p>
<o:p></o:p>
调整性能参数,提高建立索引效率<o:p></o:p>
IndexWriter提供了一些参数可供设置,列表如下<o:p></o:p>