如何理解Lucene的简介与索引过程

55次阅读
没有评论

共计 1598 个字符,预计需要花费 4 分钟才能阅读完成。

本篇文章为大家展示了如何理解 Lucene 的简介与索引过程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Lucene 的介绍与使用

Lucene 简介

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

什么是全文检索?

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

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

Lucene 实现全文检索

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

基于上图分解

原始文档:
原始文档可以是网页, 邮件,word 文档等内容. 那么 Lucene 不提供相关的网页数据的抓取, 但是 Doug Cutting 开发了 Nutch 提供了网络爬虫的功能。下面介绍一些常见的爬虫工具
1.1:Nutch: Doug Cutting 开发的网络爬虫工具, 实现分布式网页数据采集功能。
1.2:Scrapy: Python 领域专业的爬虫开发框架,已经完成了常用的爬虫工具。
1.3:WebMagic:Java 方向基于 Scrapy 的思想开发的网络爬虫库, 在 Java 方向有非常高的人气。…

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

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

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

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

TemrsDocumentIdPHPdoc_1,doc_2,doc_3 世界 doc_1,doc_3 语言 doc_2,doc_3

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

上述内容就是如何理解 Lucene 的简介与索引过程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计1598字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)