vlambda博客
学习文章列表

原创Lucene001--介绍和入门

一、什么是Lucene

Lucene是apache下的一个开源的全文检索引擎工具包。它为软件开发人员提供一个简单易用的工具包(类库),以方便的在目标系统中实现全文检索的功能。

二、全文检索的应用场景

2.1搜索引擎

搜索引擎.PNG

2.2站内搜索

原创Lucene001--介绍和入门

站内搜索.png

2.3文件系统的搜索

原创Lucene001--介绍和入门

文件系统搜索.png

总结:Lucene和搜索引擎是不同的,Lucene是一套用java或其它语言写的全文检索的工具包。它为应用程序提供了很多个api接口去调用,可以简单理解为是一套实现全文检索的类库。搜索引擎是一个全文检索系统,它是一个单独运行的软件系统。

三、全文检索的定义

全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的。这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。

四、Lucene实现全文检索的流程

原创Lucene001--介绍和入门

流程.png

全文检索的流程分为两大部分:索引流程、搜索流程:

  • 索引流程:即采集数据-->构建文档对象-->分析文档(分词)-->创建索引。

  • 搜索流程:即用户通过搜索界面-->创建查询-->执行搜索,搜索器从索引库搜索-->渲染搜索结果。

Lucene本身不能进行视图渲染。

五、入门程序

5.1需求

使用lucene完成对数据库中图书信息的索引和搜索功能。

5.2环境

  • Jdk:1.7及以上

  • Lucene:4.10(从4.8版本以后,必须使用jdk1.7及以上)

  • Ide:indigo

  • 数据库:mysql

5.3数据库脚本

原创Lucene001--介绍和入门

数据库脚本.PNG

5.4Lucene下载

Lucene是开发全文检索功能的工具包,使用时从官方网站下载,并解压。

官方网站:http://lucene.apache.org/
目前最新版本:5.4.0

下载地址:http://archive.apache.org/dist/lucene/java/
下载版本:4.10.3
JDK要求:1.7以上(从版本4.8开始,不支持1.7以下)

原创Lucene001--介绍和入门

1.png

原创Lucene001--介绍和入门

2.png

原创Lucene001--介绍和入门

3.png

原创Lucene001--介绍和入门

4.png

5.5工程搭建

所需要的jar包:

  • mysql5.1驱动包:mysql-connector-java-5.1.7-bin.jar

  • 核心包:lucene-core-4.10.3.jar

  • 分析器通用包:lucene-analyzers-common-4.10.3.jar

  • 查询解析器包:lucene-queryparser-4.10.3.jar

  • junit包:junit-4.9.jar(非必须)

原创Lucene001--介绍和入门

工程.PNG

5.6实现全文检索

第一步:索引流程

对文档索引的过程,就是将用户要搜索的文档内容进行索引,然后把索引存储在索引库(index)中。

1.为什么要采集数据

全文检索搜索的内容的格式是多种多样的,比如:视频、mp3、图片、文档等等。对于这种格式不同的数据,需要先将他们采集到本地,然后统一封装到lucene的文档对象中,也就是说需要将存储的内容进行统一才能对它进行查询。

2.采集数据的方式

  • 对于互联网中的数据,使用爬虫工具(http工具)将网页爬取到本地

  • 对于数据库中的数据,使用jdbc程序进行数据采集

  • 对于文件系统的数据,使用io流采集

因为目前搜索引擎主要搜索数据的来源是互联网,搜索引擎使用一种爬虫程序抓取网页( 通过http抓取html网页信息),以下是一些爬虫项目:

  • Solr(http://lucene.apache.org/solr) ,solr是apache的一个子项目,支持从关系数据库、xml文档中提取原始数据。

  • Nutch(http://lucene.apache.org/nutch), Nutch是apache的一个子项目,包括大规模爬虫工具,能够抓取和分辨web网站数据。

  • heritrix(http://sourceforge.net/projects/archive-crawler/files/),Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。

3.索引文件的逻辑结构

原创Lucene001--介绍和入门

索引文件的逻辑结构.PNG

文档域:

文档域存储的信息就是采集到的信息,通过Document对象来存储,具体说是通过Document对象中field域来存储数据。

比如:数据库中一条记录会存储一个一个Document对象,数据库中一列会存储成Document中一个field域。

文档域中,Document对象之间是没有关系的。而且每个Document中的field域也不一定一样。

索引域:

索引域主要是为了搜索使用的。索引域内容是经过lucene分词之后存储的。

倒排索引表

传统方法是先找到文件,如何在文件中找内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大就搜索慢。
倒排索引结构是根据内容(词语)找文档,倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它是在索引中匹配搜索关键字,由于索引内容量有限并且采用固定优化算法搜索速度很快,找到了索引中的词汇,词汇与文档关联,从而最终找到了文档。

原创Lucene001--介绍和入门


十年IT老兵,专注后端技术