Apache Software Foundation 4 Jakarta项目组的子项目Lucene是一个开源的全文搜索引擎工具包,但它不是一个完整的全文搜索引擎,而是一个全文搜索引擎架构,提供完整的查询引擎和索引引擎,以及一些文本分析引擎(英语和德语是两种西方语言)。Lucene旨在为软件开发人员提供一个简单易用的工具包,以便在目标系统中方便地实现全文检索功能,或者在此基础上构建一个完整的全文检索引擎。
全文检索概述
例如,我们在一个文件夹或磁盘中有许多文件,如记事本、世界、Excel和pdf,我们希望根据关键字搜索包含的文件。例如,如果我们输入Lucene,所有包含Lucene的文件都将被签出。这被称为全文检索。
因此,我们很容易认为应该在关键词和文件之间建立一个相关的映射,在ppt中窃取一张图片,并解释清楚如何实现这个映射。
倒排索引
有了这个映射关系,我们再来看看Lucene的架构设计。
以下是Lucene数据的必要图片,但也是对其本质的总结。
我们可以看到Lucene主要分两步使用:
1创建索引,通过IndexWriter为不同的文件创建索引,并保存在索引相关文件的存储位置。
通过索引搜索关键词相关文档。
在Lucene中,利用这种“倒排索引”技术实现相关映射。
Lucene数学模型
文档、域和单词元素
文档是Lucene搜索和索引的原子单位,文档是包含一个或多个域的容器,而域依次包含“真实”的搜索内容,域值通过分词技术处理得到多个词。
比如一部小说(破空)的信息可以称为文档,小说信息包含多个字段,如标题(破空)、作者、简介、上次更新时间等。在标题字段中使用分词技术可以获得一个或多个单词(战斗、突围、天空、天空)。
Lucene文件结构
分级结构
索引索引存储在目录中
一个索引可以有多个彼此独立的段。添加新文档可能会产生新的段,不同的段可以合并成新的段
文档文档是索引创建的基本单位。不同的文档存储在不同的段中,一个段可以包含多个文档
字段字段,文档包含不同类型的信息,并可以拆分为索引
术语是索引的最小单位,是经过词法分析和语言处理后的数据。
转发信息
根据层次结构,保存了从索引到词的包含关系:索引-段-文档-字段-术语。
反向信息
反向信息保存字典:术语-文档的反向表映射
IndexWriterlucene是最重要的类之一,主要用于向索引中添加文档,控制索引过程中一些参数的使用。
分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer、StopAnalyzer和WhitespaceAnalyzer。
存储目录索引的位置;Lucene为索引提供了两个存储位置,一个是磁盘,另一个是内存。通常,索引放在磁盘上;相应地,lucene提供了两个类:FSDirectory和RAMDirectory。
文件文档;文档相当于一个要索引的单元,任何想要索引的文件都必须转换成一个要索引的Document对象。
字段字段。
IndexSearcher是lucene中最基本的检索工具,将用于所有检索;
查询查询,lucene支持模糊查询、语义查询、短语查询、组合查询等,如术语查询、布尔查询、范围查询、通配符查询等。
QueryParser是一个解析用户输入的工具,可以通过扫描用户输入的字符串来生成Query对象。
搜索完成后,Hits需要返回并向用户显示搜索结果,这是完成搜索的唯一途径。在lucene中,搜索结果的集合由Hits类的实例表示。
判例案件
Github代码
我已经将代码放入Github并导入了spring-boot-lucene-demo项目
github spring-boot-Lucene-演示
添加依赖项
!-分词索引的查询分析-依赖groupIdorg.apache.lucene/groupId artifactidLucene-query parser/artifactidVersion 7 . 1 . 0/version/depend