在应用中加入全文检索功能
ac ——基于Java的全文索引引擎Lucene简介
kNq>{dNRx 作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com
|H-%F?<{ a',6WugIP 写于:2002/08 最后更新: 11/29/2006 17:23:30
OlRtVp1 Feed Back >> (Read this before you ask question)
!r\u,l^ o%3i(H 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
>7g #e,d http://www.chedong.com/tech/lucene.html 'Ur1I" 6mp8v`b 关键词:Lucene java full-text search engine Chinese word segment
#+CH0Z Wh).%K(t 内容摘要:
s&v7<)*q Uh[MBwK Lucene是一个基于Java的全文索引工具包。
tb$I8T |wbXu: 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史
Kk.a9uKI} 全文检索的实现:Luene全文索引和数据库索引的比较
6g*?(Y][ 中文切分词机制简介:基于词库和自动切分词算法的比较
<pA%|] 具体的安装和使用简介:系统结构介绍和演示
"&Q sv-9t Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展
2{U5*\FhVX 从Lucene我们还可以学到什么
|"]#jx*8KC 基于Java的全文索引/检索引擎——Lucene
DVJuX~'|! gq%U5J"x;J Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/
?D>%+rK8c `JQw]\f4> 检索功能。
R+sv? 4k p1F{ v^ Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的
y{>T['"@ l,fwF ua 主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用
u~rPqBT{d3 Q|KD$2rB 程序加入全文检索功能。
/]U),LbN {L'uuG\9U Lucene的发展历程:早先发布在作者自己的
www.lucene.com,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:
3~q#P B*Z}=$1j http://jakarta.apache.org/lucene/ osM[Xv &=f] a 已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,比较著名的有:
,FIG5-e,} 'p_|Rw> Jive:WEB论坛系统;
af@R\"N9c Eyebrows:邮件列表HTML归档/浏览/查询系统,本文的主要参考文档“TheLucene search engine: Powerful, flexible, and free”作者就是
ZR]p7{8B W3+;1S$k EyeBrows系统的主要开发者之一,而EyeBrows已经成为目前APACHE项目的主要邮件列表归档系统。
y^0
mf| Cocoon:基于XML的web发布框架,全文检索部分使用了Lucene
gQQve{' Eclipse:基于Java的开放开发平台,帮助部分的全文索引使用了Lucene
xig4H7V q$7w?(Lk 对于中文用户来说,最关心的问题是其是否支持中文的全文检索。但通过后面对于Lucene的结构的介绍,你会了解到由于Lucene良好架构设计
V36u%zdX5n o[I
s$j ,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。
i/{dD"HwM h 8<s(WR 全文检索的实现机制
B_DyH
C\< h
?_@nQ! Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的
xiv8q/ Vp$<@Y 映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。
w`GjQIA vRkVPkZ6| 比较一下Lucene和数据库:
73j\!x }!uwWBw` Lucene 数据库
|zbM$37?k 索引数据源:doc(field1,field2...) doc(field1,field2...) \ indexer / _____________
*j~ObE_y + L[a | Lucene Index| -------------- / searcher \ 结果输出:Hits(doc(field1,field2) doc
?`=
<*{_o ~%eZQgqA* (field1...))
c( _R
xLJ 索引数据源:record(field1,field2...) record(field1..) \ SQL: insert/ _____________
bV$g]->4e uK%0,!q | DB Index | ------------- / SQL: select \结果输出:results(record(field1,field2..) record
?%cZO" _TwEym.V (field1...))
|.OS7Gt? &( ZEs c Document:一个需要进行索引的“单元”
"M;[c9 一个Document由多个字段组成 Record:记录,包含多个字段
{3T&6 LA Field:字段 Field:字段
Qo/pz2N Hits:查询结果集,由匹配的Document组成 RecordSet:查询结果集,由多个Record组成
.PD_Vv>C/> B.A;1VE5 全文检索 ≠ like "%keyword%"
Ip<