年
卷 第
2 0 0 9
第
13
月
期
4
2
宁 波 职 业 技 术 学 院 学 报
Journal of Ningbo Polytechnic
Apr, 2 0 0 9
Vol.13 No.2
基于
Lucene
搜索引擎的设计与实现
严良达
(东南大学 计算机科学与工程系, 南京 210000)
是一个强大的全文索引引擎工具包
,
的索引和搜索
应用它可以快速地开发一个搜索引擎
。
并且设计实现了一个自己的搜索引擎
,
介绍了基于英特
易搜中文搜
———
摘 要: Lucene
网的中文搜索引擎的系统结构
索引擎
关键词: Web;
中图分类号: TP 393.4
搜索引擎
结果表明
基于
。
,
Lucene
; Lucene
,Lucene
的搜索引擎在索引和查找上的效率很高
。
文献标识码: A
文章编号: 1671-2153(2009)02-0057-04
0 引 言
/
Java
Lucene[1-2]是一个用
,
写的全文检索引擎工
可以方便地嵌入到各种应用中实现针对应
用户可以基于它开发出
它是一个全文检索引擎
索引引擎及部分
提供了完整的查询引擎
具包
检索功能
用的全文索引
,
各种全文搜索的应用[3-4]。
的架构
文本分析引擎
从问世之后
本文在研究分析
。
引发了开放源代码社群的巨大反响
作为一个开放源代码项目
。
运作机制的
的系统结构
,Lucene
,
,
、
Lucene
、
基础上
擎
———
设计并实现了一个基于
,
易搜中文搜索引擎
。
的搜索引
Lucene
1 搜索引擎的结构
搜索引擎是根据用户的查询请求
,
算法从索引数据中查找信息返回给用户
证用户查找信息的精度和新鲜度
,
建立并维护一个庞大的索引数据库
引擎由网络机器人程序
据库等部分组成
系统结构如图
按照一定
为了保
搜索引擎需要
一般的搜索
索引数
索引与搜索程序
所示
。
。
、
、
。
1
。
索引数据库
Lucene
网络机器人程序
网络机器人程序
WWW
文档
建立
索引
Lucene
从数据库中搜索信息
JSP
服务器
Tomcat
浏览器
WWW
浏览器
WWW
图 1 系统结构
收稿日期: 2008-10-14
作者简介:
严良达
(1980-),
浙江宁波人
男
,
,
浙江工商职业技术学院助教
在职硕士研究生
,
,
从事网络和软件技术方面研究
。
2009 年第 2 期
··
57
宁波职业技术学院学报
。
“
。
(a)
Web
Web
扫描程序
”(Spider),
网络机器人
是一个功能很强的
网络机器人也称为
网络蜘
它
页面的同时检索其内的超链接并
中广泛使
。
程序理论上可以访问
为了保证网络机器人遍历信息的
。
需要设定一些重要的链接并制定相
蛛
可以在扫描
加入扫描队列等待以后扫描
用超链接
整个
广度和深度
,
关的扫描策略
所以一个
,
页面
Spider
因为
Web
Web
。
。
,
。
(b)
如果通过
索引与搜索
SQL
为了提高检索效率
网络机器人将遍历得到的页
直接查询
需要建立
如果索引不及时
用户输入搜
面存放在临时数据库中
信息速度将会很慢
索引
更新
索条件后搜索程序将通过索引数据库进行检索
,
然后把符合查询要求的数据库按照一定的策略进
行分级排列并且返回给用户
按照倒排文件的格式存放
用户用搜索引擎也不能检索到
,
,
。
,
。
,
。
服务器
询
据库进行连接
(c)Web
这就需要系统提供
客户一般通过浏览器进行查
服务器并且与索引数
客户在浏览器中输入查询条件
,
服务器接收到客户的查询条件后在索引数据
Web
。
。
Web
库中进行查询
排列
、
,
然后返回给客户端
。
2 Lucene 的索引与搜索
是
Lucene
Jakarta Apache
的开源项目
Java
写的全文索引引擎工具包
个用
嵌入到各种应用中实现针对应用的全文索 引
索功能
,
/
。
它是一
可以方便的
检
。
接口设计的比较通用
输入输
所以
数据库等都可以比较方便
,
字段
记录
==>
==>
,
的存储结构和接口中
。
当成一个支持全文索
全文检索的实现机制
2.1
的
Lucene
API
出结构都很像数据库的表
很多传统的应用文件
的映射到
总之
可以先把
Lucene
、
,
Lucene
引的数据库系统
。
2.2 Lucene
的索引效率
。
,
此
like“%keyword%”
作用的
在使用
查询时
,
于一页页翻书的遍历过程了
查询的数据库服务来说
的
,like
like
由于数据库索引不是为全文索引设 计 的
使用
时
,
因
数据库索引是不起
,
搜索过程又变成类似
所以对于含有模糊
,
对性能的危害是极大
。
如果是需要对多个关键词进行模糊匹配
“%keyword1%”and like“%keyword2%”…
就可想而知了
:like
其效率也
所以建立一个高效检索系统的关
。
· · 2009 年第 2 期
58
,
,
)
(
,
==>
关键词
文章映射关系
比如多篇文章
将数据源
有另外一个排好序的关键词列表
键是建立一个类似于科技索引一样的反向索引机
排序顺序存储的同
制
时
用于存储关
,
利用这样的映射关系索
键词
引
出现次数
==>
:[
甚至包括位置
出现
(
频率
检索过程就是把模糊查询变成多个可以利
从而大大
用索引的精确查询的逻辑组合的过程
提高了多关键词查询的效率
全文检索问题
归结到最后是一个排序问题
出现关键词的文章编号
起始偏移量
结束偏移量
所以
),
],
,
,
。
,
,
:
,
由此可以看出
模糊查询相对数据库的精确
这也是大部分数
查询是一个非常不确定的问题
,
据库对全文检索支持有限的原因
最核心
的特征是通过特殊的索引结构实现了传统数据库
不擅长的全文索引机制
以方
便针对不同应用的定制
并提供了扩展接口
。 Lucene
,
,
。
。
2.3
中文切分词机制
对于中文来说
,
对于英文来说
全文索引首先还要解决一个
语句中单词之间
但亚洲语言的中日韩文
首先要把语句
这个词如何切分出来就
所以
,
。
,
;
语言分析的问题
是天然通过空格分开的
语句中的字是一个字挨一个
中按
是一个很大的问题
进行索引的话
词
,
“
”
,
,
”
。
”
“
,
”
,
”?
:“
时
? “
首先
上 海
北京天安门
不 能 让 含 有
(si-gram)
海 上
肯定不能用单个字符作
否 则 查
,
“
但一句话
为索引
也 匹
计算机如何按照中
”,
还是
北京 天安门
让计算机能够按照语言习惯进
往往需要机器有一个比较丰富的词库才
另外一个
将单词按照二
北 京 天 安
在查询
将
”,
天安
同
这种方式对
单 元
配
文的语言习惯进行切分呢
北 京 天安门
“
行切分
能够比较准确的识别出语句中的单词
解决的办法是采用自动切分算法
元 语 法
门
的时候
查询词组按同样的规则进行切分
安门
“and”
样能够正确地映射到相应的索引中
于其他亚洲语言如韩文和日文都是通用的
,
北京 京天 天安 安门
: “
这样
天安门
:“
”,“
的关系组合
多个关键词之间按与
”。
还是查询
方 式 切 分 出 来
无论是查询
:
比 如
“
北京
(bigram)
” ==> “
北京
”,
。
,
,
“
”
,
。
。
。
,
缺点是索引效率低
基于自动切分的最大优点是没有词表维护成
但对于中小型
实现简单
基于
而
本
应用来说
二元切分后的索引一般大小和源文件差不多
对于英文
基于二元语法的切分还是够用的
索引文件一般只有原文件的
,
,
,
,
。
30%~40%
,
严良达
基于
:
Lucene
搜索引擎的设计与实现
不同
。
2.4 Lucene
Spider
与
的结合
首先构造一个
构造
Index
类如图
类用来实现对内容进行
所示
代码略
Index
2
(
)。
索引
,
然后构造一个
HTML
收集的新闻内容进行索引
图 2 构造 Index 类
解析类
如图
,
程序
bot
把通过
,
所示
。
3
图 3 构造 HTML 类
在进行大量数据搜索时
那将是非常难的
所以本文提出了使用全文搜索引擎
,
,
如果使用单纯的数
速度将是极大的瓶
进
Lucene
,
据库技术
颈
行索引
。
搜索
、
。
3 搜索引擎的设计与实现
3.1 Tomcat
Web
的
服务器
Web
、
料查询
务器
三个步骤
器发出
。 Web
、
服务器是在网络中为实现信息发布
资
数据处理等诸多应用搭建基本平台的服
页面处理中大致可分为
浏览器向一个特定的服务
服务器接收到
第二步
页面
并将所
服务器在
第一步
寻找所请求的
,Web
;
页面请求
,Web
Web
:
Web
页面请求后
,
页 面 传 送 给
Web
服务器接收到所请求的
Web
Web
浏 览 器
页面
;
,
Web
,
第 三 步
,
并将它显
Web
请 求 的
Web
示出来
Tomcat
应 用 软 件 基 于
和
是 一 个 开 放 源 代 码
的
应 用 软 件 容
子项目支持并由来
Servlet
运 行
Web
Java
、
Apache-Jakarta
社 区 的 志 愿 者 进 行 维 护
JSP Web
器
自 开 放 性 源 代 码
。 Tomcat
由
Java
是根据
和
Servlet
。
规范进行执行
JSP
也实行了
Tomcat Server
Apache-
且比绝大多数商业应用软件服务器
Tomcat Server
的
因此
可以说
。
,
规范
,
Jakarta
要好
。
在
3.2
Tomcat
Tomcat
文件
与
,
。
JAR
Archive)
程序格式
包
其根目录下包含有
种文件的目录
,
这个目录很重要
web.xml
应用的配置文件
的
文 件 和 一 个
而
或
类和
,
Servlet
上部署项目
中 的 应 用 程 序 是一 个
:
,
和
Jsp
Web
Html
。 WAR
提出的一种
是
类似
另外还会有一个
WAR (Web
应用
Sun
也是许多文件的一个压缩
通常
文件或者包含这两
目录
,
目录下有一个
目 录
是 这 个
目录下则包含编译好
所依赖的其他类
如
通 常 这 些 所 依 赖的 类 也 可 以 打 包 成
当然也可以
WEB-INF
WEB-INF
,web.xml
目录下
通常在
classes
classes
Servlet
下的
Jsp
。
(
,
这个包中的文件按一定目录结构来组织
JavaBean)。
放到
JAR
放到系统的
WEB-INF
CLASSPATH
lib
中
。
在
Tomcat
中
放到
,
应用程序的部署很简单
,
目录下
只需将
WAR
你的
Tomcat
会自动检测到这个文件
访问这个应用的
时
要将
转化为
访问将会很快
Tomcat
译以后
Jsp
Jsp
。
,
webapp
的
并将其解压
通常第一次会很慢
,Tomcat
在浏览器中
因为
编
,
然后编译
。
,
,
文件
,
Servlet
。
搜索引擎的具体实现
3.3 Lucene
文中基于
———
Lucene
易搜中文搜索引擎
设计并实现了一个支持全文
易搜中文搜
页面中按照超连接进行解
并把搜索到的每条新闻进行索引后加入
,
然后通过
服务器接受客户端请求后
搜索的实例
索引擎是从指定的
析
数据库
从索引数据库中搜索出所匹配的新闻
搜索
Web
Web
。
,
、
。
GET
,
服务端设计
用户通过
(1)
术实现
交查询条件
受并分析提交参数
搜索操作
式发送至客户端
。
,
,
主要利用
的
JavaTM Servlet
技
方法从客户端向服务端提
容器接
Servlet
的开发包进行
消息包的形
服务端
Tomcat
Lucene
HTTP
再调用
从而完成一次搜索操作
最后把搜索的结果以
服务端通过
。
。
,
程序的结构如图
所示
。
4
。
Servlet
2009 年第 2 期
··
59
宁波职业技术学院学报
。
客户端设计
(2)
例如
,
要
计的时候也应充分考虑实用性和简洁性
计实现的搜索引擎
就以它简洁的查询界面而闻名
图
一个良好的查询界面非常重
在设
为设
易搜中文搜索引擎的搜索结果
Googl
5
。
。
。
-
4 结束语
本文首先介绍了
,
基于
Lucene
Lucene
检索的基本概念
然
的索引和
设计并实现了一个
详
后从搜索引擎的系统结构
、
搜索等方面进行详细的说明
支 持 全 文 搜 索 的 实 例
细介绍了
Lucene
实际应用可推广至许多其他的应用实例的设计与
实现
易 搜 中 文 搜 索 引 擎
的实际应用
本文介绍的
Lucene
——
。
,
。
。
图 4 服务端 Servlet 程序
图 5 搜索结果
参考文献:
[1] The Apache Jakarta Project:Lucene [EB / OL]. (2003 -
[2]
04)[2008-05]. http: / / jakar2ta.apache.org / lucene / .
车 东
全文索引引擎
在 应 用 中 加 入 全 文检 索 功 能
基 于
简介
———
.
Java
Lucene
[EB / OL]. (2002-08)[2008-
的
[3]
[4]
05].http: / / www.chedong.com / tech / lucene.html.
李玮
搜索引擎与全文检索技术
李利
,
. Web
情报科
[J].
学
,2003(5):265-268.
徐宝文
张卫丰
,
.
清华大学出版社
搜索引擎与信息获取技术
[M].
北京
:
,2003.
Design and implementation of search engine based on Lucene
(Southeast University School of Computer Science and Engineering, Nanjing 210000, China)
YAN Liang-da
Abstract: Lucene is a powerful full-text indexing engine kit. We can quickly develop a search engine with it. This
paper introduces a system structure of Chinese search engine based on the Internet, the search and the index of
Lucene, and the implementation of own search engine-Yisuo Chinese search engine. This fact indicates that the
search engine based on Lucene is high efficient in indexing and searching.
Key words: WEB; search engine; Lucene
· · 2009 年第 2 期
60