目录
2.1、ElasticSearch vs Lucene的关系
1、Lucene简介
1.1、Lucene介绍
Lucene是Apache Jakarta家族中的一个开源项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎,索引引擎和部分文本分析引擎。
Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在java开发环境里
Lucene是一个成熟的免费开源工具,是目前最为流行的基于java开源全文检索工具包。
-
数据总体分为两种:结构化数据:指具有固定格式或有限⻓度的数据,如数据库、元数据等
⾮结构化数据:指不定⻓或⽆固定格式的数据,如邮件、word⽂档等磁盘上的⽂件
-
对于结构化数据的全⽂搜索很简单,因为数据都是有固定格式的,例如搜索数据库中数据使⽤ SQL 语句即可
-
对于⾮结构化数据,有以下两种⽅法:顺序扫描法(Serial Scanning)、全⽂检索 (Full-text Search)顺序扫描法 :如果要找包含某⼀特定内容的⽂件,对于每⼀个⽂档,从头到尾扫描内容,如果此⽂档包含此字符串, 则此⽂档为我们要找的⽂件,接着看下⼀个⽂件,直到扫描完所有的⽂件,因此速度很慢。全⽂检索 :将⾮结构化数据中的⼀部分信息提取出来,重新组织,使其变得具有⼀定结构,然后对此有⼀定结构的数 据进⾏搜索,从⽽达到搜索相对较快的⽬的。这部分从⾮结构化数据中提取出的然后重新组织的信息,我们称之索引。
1.2、Lucene全⽂检索流程
-
创建索引过程,对要搜索的原始内容进⾏索引构建⼀个索引库。索引过程包括:确定原始内容即要搜索的内容 → 采集⽂档 → 创建⽂档 → 分析⽂档 → 索引⽂档。
-
搜索索引过程,从索引库中搜索内容。搜索过程包括:⽤户通过搜索界⾯ → 创建查询 →执⾏搜索,从索引库搜索 → 渲染搜索结果。
1.2.1、创建索引
对⽂档索引的过程,将⽤户要搜索的⽂档内容进⾏索引,索引存储在索引库( index )中。这⾥我们要搜索的⽂档是 磁盘上的⽂本⽂件,根据案例描述:凡是⽂件名或⽂件内容包括关键字的⽂件都要找出来,这⾥要对⽂件名和⽂件内 容创建索引。- 获得原始⽂档:
原始⽂档是指要索引和搜索的内容。原始内容包括互联⽹上的⽹⻚、数据库中的数据、磁盘上的⽂件等。
-
创建⽂档对象:获取原始内容的⽬的是为了索引,在索引前需要将原始内容创建成⽂档( Document ),⽂档中包括⼀个⼀个的域 ( Field ),域中存储内容。 这⾥我们可以将磁盘上的⼀个⽂件当成⼀个 document , Document 中包括⼀些 Field (file_name ⽂件名称、 fi le_path ⽂件路径、 fi le_size ⽂件⼤⼩、 fi le_content ⽂件内容),如下图:
注意:
-
每个Document可以有多个Field,不同的Document可以有不同的Field
-
每个⽂档都有⼀个唯⼀的编号,就是⽂档 id 。
- 分析⽂档:
将原始内容创建为包含域( Field )的⽂档( document ),需要再对域中的内容进⾏分析,分析的过程是经过对原始⽂档提取单词、将字⺟转为⼩写、去除标点符号、去除停⽤词等过程⽣成最终的语汇单元,可以将语汇单元理解为⼀ 个⼀个的单词。 ⽐如下边的⽂档经过分析如下
原⽂档内容:Lucene is a Java full-text search engine. Lucene is not a completeapplication, but rather a code library and API that can easily beused to add search capabilities to applications.分析后得到的语汇单元:lucene 、 java 、 full 、 search 、 engine...每个单词叫做⼀个 Term ,不同的域中拆分出来的相同的单词是不同的 term 。 term 中包含两部分⼀部分是⽂档的域名,另⼀部分是单词的内容。 例如:⽂件名中包含 apache 和⽂件内容中包含的 apache 是不同的 term 。- 创建索引—倒排索引:
-
-