[转载] Lucene 的简介与索引过程介绍

上一篇为大家大致讲解了倒排索引的意思,能够理解倒排索引的优势。如果有没看过的朋友请看上一篇<倒排索引,正排索引与Lucene>。上一篇主要为大家引入了Lucene。但是没有详细的对Lucene进行相关的介绍。本篇主要为大家介绍一下Lucene与安装使用

Lucene简介

作者大神

上一篇已经大概说过了开发Lucene的大神 Doug Cutting,Doug Cutting利用周末的时间使用纯Java语言开发了一个文本搜索引擎,能够为中小企业加入到全文检索引擎。这位大神所开发的作品应该有非常多的人使用过或者听说过。他是Lucene,Nutch,Hadoop等项目的发起人,奠基者。并且最终把项目进行开源普惠大众。

Lucene是Doug Cutting利用周末时间所开发的全文检索引擎,Doug Cutting主导开发了Lucene与Nutch,而基于Nutch中分离出的Hadoop在Yahoo成立Hadoop项目组,继续主导推动Hadoop的研发。Lucene不是一个应用软件,而是类似于一个全文检索的函数库,他为应用软件提供了基础了函数接口,实现文档到检索的API。


什么是全文检索?

首先考虑数据类型问题。

  1. 结构化数据 能够具有固定的格式,长度的数据。如数据库。
  2. 非结构化数据 数据无定长,无严格的格式划分,无schema信息等.如 日志,邮件,文档等。
  3. 解决非结构化的数据检索的问题数据库方式也可以。但是效率较低。那么对于该类日志的使用场景基本上属于基于内容的检索。

全文检索的应用场景问题

  1. 日志分析: 对于没有定义详细结构的日志数据的分析.例如基于关键词查询。(当前我司的日志数据就是这种方式,日志输出较为随意,通过某些关键词进行检索日志中的异常问题)
  2. 搜索引擎搜索: 搜索引擎的全文检索是典型的场景,同样是通过关键词来检索到爬虫抓取到的网页,文档等相关内容
  3. 电商搜索: 对于电商站内的商品进行基于类别,标题,内容的相关性商品的检索等

Lucene实现全文检索

【转载】Lucene的简介与索引过程介绍

基于上图得到如果需要使用Lucene进行全文检索的整体流程。

基于上图分解

1. 原始文档:

原始文档可以是网页,邮件,word文档等内容.那么Lucene不提供相关的网页数据的抓取,但是Doug Cutting开发了Nutch提供了网络爬虫的功能。下面介绍一些常见的爬虫工具

  1. Nutch: Doug Cutting开发的网络爬虫工具,实现分布式网页数据采集功能。
  2. Scrapy: Python领域专业的爬虫开发框架,已经完成了常用的爬虫工具。
  3. WebMagic:Java方向基于Scrapy的思想开发的网络爬虫库,在Java方向有非常高的人气。

2. 创建文档对象:

创建文档对象是为了能够实现检索即可获得到该文档内容。例如搜索引擎搜索 “PHP是世界上最好的语言” 即可获取到某篇网页内容,网页内容即可定义为文档对象。那么这里我们就把一个网页定义为一个文档对象(Document),每个文档对象中又包含各种的Field(标题,内容,时间,作者等).当然在网页采集中尽量提取能够获取到的Field,而类似于谷歌,百度等都会有相应的规则,能够让爬虫程序识别到哪里是 标题,内容等。但是每个文档都会有唯一的地址,例如网页的网址

3. 分析文档内容:

分析文档内容即把文档中的各种Field中的内容进行分析,进行分词、大小写转换、特殊符号过滤、去除停用词等使其生成最终的词汇单元,也就是一个个的单词。
比如:
PHP是世界上最好的语言

分词后的词汇单元为:
PHP、世界上、最好、语言

每个单词叫做Term,不同的Document、Field中拆分出不同的Term。Term中包含DOcumentID与单词内容。

4. 创建索引:

创建索引的目的是为了检索到相关的文档,所以全文检索最终的Term其实最终要定位到一个Document。那么简单来想索引库中包含的Term基本上会有多个DocumentId用来定位该Term可检索到的文档。
简单的可以为:

Temrs DocumentId
PHP doc_1,doc_2,doc_3
世界 doc_1,doc_3
语言 doc_2,doc_3

至此Lucene的索引即构建完成,索引库建立即可通过Lucene提供的检索Api进行数据的检索。

作者:CainGao
来源:指尖数虫
原文链接:mp.weixin.qq.com/s/0WtZAAfXy_InBEM…

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!