Lucene全文检索技术
- 介绍
Lucene是apache软件基金会下的一个子项目。是一个成熟,免费,开放源代码的全文检索引擎工具包
Lucene能够为文本类型的数据建立索引,只需要把数据转换成文本格式,Lucene就可以对文档进行索引和检索。常见的有word,html,pdf文档。 - 什么是全文检索
(1) 索引程序:计算机通过索引程序,扫描文件中的每一个词语,建立词语与文件的对应关系,把对应关系保存到索引库中
(2) 检索程序:计算机通过检索程序,根据用户输入的搜索关键词,在索引库中搜索目标内容 - Lucene下载方式
Lucene官方网站地址:http://lucene.apache.org/
全文检索流程
1.索引和检索流程图
索引流程详细介绍
- 原始数据
(1) 保存在关系数据库中的数据
(2) 保存在文件上的数据
(3) 网络上的网页文件数据 - 采集数据
(1) 通过JDBC操作获取关系数据库的数据(对应关系数据库中的数据)
(2) 通过IO流操作获取文件上的数据
(3) 通过爬虫程序获取网络上的网页文件数据 - 建立文档对象
文档对象:是非结构化数据。一个文档对象包含多个域。一个文档对象就相当于关系数据库表(结构化数据)中的一条记录,一个域相当于一个字段
结构化数据:长度固定,格式固定。
非结构化数据:长度不固定,格式不固定 - 分析文档
原始数据转换成文档对象后,使用分析器(分词器)把文档域中的内容切成一个一个的词语,为后续建立索引做准备 - 建立索引
(1) 介绍:建立倒排索引(建立词语与文档的对应关系,词语在什么文档出现,出现了多少次,在什么位置出现)。把倒排索引保存到索引 - 实现原理
以Lucene为例建立倒排索引:
文件一(编号0):we like java java
文件二(编号1):we like lucene lucene
Term | (Document,Frequency) | Position |
---|---|---|
we | (0,1)(1,1) | (0)(0) |
like | (0,1)(1,1) | (1)(1) |
java | (0,2) | (2,3) |
lucene | (1,2) | (2,3) |
说明:
(1) 倒排索引:建立词语与文件(文档)的对应关系,词语在什么文件出现,出现几次,在什么位置出现
(2) 搜索的时候:根据用户输入的搜索关键词,比如java。直接在倒排索引中就可以找到与文件的对应关系。不需要再查找全部文件,减少了搜索范围,搜索速度快
检索流程详细介绍
- 用户
用户对象可以是人,也可以是程序 - 用户查询
用户在搜索入口界面输入搜索关键词,执行搜索 - 建立查询对象
根据用户输入的搜索关键词,比如java。建立查询对象Query,Query对象会生成查询语法。
举例:输入bookName:java,表示搜索图书名称域中,包含有java的图书 - 执行查询
根据查询对象Query和该对象生成的语法,在索引库中查找目标内容 - 返回查询结构