Lucene 原理和实现机制

JAVA herman 1764浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

还有不了解 Lucene 的,可以先看我前面一篇关于 Lucene 简介的文章《Apache Lucene 简介》。本文将详细的介绍 Lucene 的原理和实现机制,以及 Lucene 和数据库的对比。

目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。

搜索应用程序和 Lucene 之间的关系

Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。

Lucene 和数据库的比较

下面的表格是 Lucene 和数据库的对比:

Lucene 数据库
索引数据源:doc(field1,field2…) doc(field1,field2…)
                  \  indexer /
                 _____________
                | Lucene Index|
                ————–
                 / searcher \
 结果输出:Hits(doc(field1,field2) doc(field1…))
索引数据源:record(field1,field2…) record(field1..)
              \  SQL: insert/
               _____________
              | DB  Index   |
               ————-
              / SQL: select \
结果输出:results(record(field1,field2..) record(field1…))
Document:一个需要进行索引的“单元”一个Document由多个字段组成 Record:记录,包含多个字段
Field:字段 Field:字段
Hits:查询结果集,由匹配的Document组成 RecordSet:查询结果集,由多个Record组成

Lucene 搜索应用程序的工作原理

任何搜索应用程序执行一些或全部下列操作。

  1. 获取原始内容:任何搜索应用程序的第一个步骤是收集在其上的搜索是要进行的目标内容。
  2. 构建文档:下一步是建立从原始内容的搜索应用程序可以理解和容易理解的文件。
  3. 分析文档:在索引过程启动,该文件是要分析作为其文本部分是一个候选索引。这个过程被称为分析文档。
  4. 索引文件:一旦文档被构建和分析,下一步是将索引它们使得该文件可被检索

全文检索

数据总体分为两种:结构化数据非结构化数据

  • 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等。
  • 非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等。

当然有的地方还会提到第三种,半结构化数据,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。

非结构化数据又一种叫法叫全文数据。

按照数据的分类,搜索也分为两种:

  • 对结构化数据的搜索 :如对数据库的搜索,用SQL语句。再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。
  • 对非结构化数据的搜索 :如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。

Lucene 原理

对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快,那么把我们的非结构化数据想办法弄得有一定结构不就行了吗?这就是全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引 。

全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) 。

  • 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
  • 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

文章开始部分的图片就是全文检索的一般过程。

总结

通过上面的讲解,我们可以总结出 Lucene 就是一个创建索引,使用索引,搜索索引的一个java工具包。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » Lucene 原理和实现机制