最简单的Lucene介绍?

版权声明:欢迎分享 https://blog.csdn.net/luo609630199/article/details/81839513

1. 全文检索介绍


首先在介绍 Lucene是什么之前,我们要先搞清楚我们生活中数据的分类,这点很重要

     我们生活中的数据总体分为两种:结构化数据和非结构化数据。

结构化数据:指具有固定格式或有限长度的数据,如数据库等。

非结构化数据:指不定长或无固定格式的数据,如邮件,word文档,音像等磁盘上的文件。

1.1 如何对结构化数据搜索?
      以数据库为例,因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。数据库中的搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。
但万事皆有特例,以like查询为例,由于like查询采用顺序扫描法,使用关键字匹配内容,对于内容量大的like查询速度将会非常慢。

1.2 如何对非结构化数据搜索?
 顺序扫描法(Serial Scanning)
所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是速度会相当的慢。
 全文检索(Full-text Search)
将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出然后重新组织的信息,我们称之索引。
例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。
虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。

 

1.3全文检索的应用场景

 比如百度, 谷歌等搜索引擎

站内搜索(重点关注)

文件系统的搜索

1. 4 如何实现全文检索
     我们可以使用Lucene实现全文检索。

那么下面我们就开始介绍Lucene


2  Lucene介绍


2.1 什么是Lucene
       Lucene是apache下的一个开源的全文检索引擎工具包(类库)。它的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。Lucene提供了完整的查询引擎和索引引擎,部分文本分析引擎。
2.2 Lucene实现全文检索的流程


全文检索的流程分为两大部分:索引流程、搜索流程。
         索引流程:即采集数据构建文档对象分析文档(分词)创建索引。
        搜索流程:即用户通过搜索界面输入创建查询执行搜索,搜索器从索引库搜索渲染搜索结果。

2.3 为什么要采集数据
       全文检索要搜索的数据信息格式是多种多样的,比如:搜索引擎(百度, google),通过搜索引擎网站能搜索互联网上的网页(html)、互联网上的音乐(mp3..)、视频(avi..)、pdf电子书等。


由于数据源头是多种多样的,所以:需要将各种各样的数据按照一定的规则统一封装到lucene的文档对象中。有统一的规则,才能进行数据的存储,搜索。
采集数据的过程就是将数据按照规则封装到lucene文档对象中的过程。


2.4 如何采集数据
  网页采集 
目前搜索引擎主要搜索数据的来源是互联网,搜索引擎使用一种爬虫程序抓取网页(通过http抓取html网页信息),Lucene并不提供信息采集的类库,需要自己编写一个爬虫程序实现信息采集,也可以通过一些开源软件实现信息采集,如下以下是一些爬虫项目:
    Nutch(http://lucene.apache.org/nutch), Nutch是apache的一个子项目,包括大规模爬虫工具,能够抓取和分辨web网站数据。
    jsoup(http://jsoup.org/),jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    heritrix(http://sourceforge.net/projects/archive-crawler/files/),Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。


简言之: lucene 是一个检索工具包(类库),不能独立的提供搜索的服务,必须嵌入到系统中才能提供完整搜索服务。
搜索引擎:是软件系统(服务器),能独立的部署和独立的提供搜索的服务。

 

 

猜你喜欢

转载自blog.csdn.net/luo609630199/article/details/81839513