还有不了解 Lucene 的,可以先看我前面一篇关于 Lucene 简介的文章《Apache Lucene 简介》。本文将详细的介绍 Lucene 的原理和实现机制,以及 Lucene 和数据库的对比。
目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。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 搜索应用程序的工作原理
任何搜索应用程序执行一些或全部下列操作。
- 获取原始内容:任何搜索应用程序的第一个步骤是收集在其上的搜索是要进行的目标内容。
- 构建文档:下一步是建立从原始内容的搜索应用程序可以理解和容易理解的文件。
- 分析文档:在索引过程启动,该文件是要分析作为其文本部分是一个候选索引。这个过程被称为分析文档。
- 索引文件:一旦文档被构建和分析,下一步是将索引它们使得该文件可被检索
全文检索
数据总体分为两种:结构化数据 和非结构化数据。
- 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等。
- 非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等。
当然有的地方还会提到第三种,半结构化数据,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。
非结构化数据又一种叫法叫全文数据。
按照数据的分类,搜索也分为两种:
- 对结构化数据的搜索 :如对数据库的搜索,用SQL语句。再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。
- 对非结构化数据的搜索 :如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。
Lucene 原理
对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快,那么把我们的非结构化数据想办法弄得有一定结构不就行了吗?这就是全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引 。
全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) 。
- 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
- 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
文章开始部分的图片就是全文检索的一般过程。
总结
通过上面的讲解,我们可以总结出 Lucene 就是一个创建索引,使用索引,搜索索引的一个java工具包。
: » Lucene 原理和实现机制
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/251652.html