Lucene入门

2019-04-05  本文已影响0人  gregocean

参考

Lucene学习总结之一:全文检索的基本原理
Lucene就是这么简单
Lucene思维导图,让搜索引擎不再难懂

Lucene 是一个高效的,基于Java 的全文检索库。很多检索工具,比如hibernate search、solr、elasticsearch都是基于它封装、扩展出来的。

简单来说,lucene 就是一个 jar 包,里面包含了封装好的各种建立倒排索引的算法代码。用 Java 开发的时候,引入 lucene jar,然后基于 lucene 的 api 去开发。
通过 lucene,我们可以将已有的数据建立索引,lucene 会在本地磁盘上面,给我们组织索引的数据结构。

目标数据对象

全文数据(非结构化数据)

非结构化数据又叫全文数据。

思想

全文数据的搜索主要有两种方法

搜索引擎数据的特点:一次写入+基本不会修改+多次查询。而后者也是一次索引,多次使用(即便索引也需要不少时间,但能大大降低查询时间),所以目前商业文本搜索应用都基于此。

使用场景

均使用倒排索引

与SQL区别,SQL搜索的缺点

  1. SQL只能针对数据库表搜索,不能直接针对硬盘上的文本搜索
  2. SQL没有相关度排名
  3. SQL搜索结果没有关健字高亮显示
  4. SQL需要数据库的支持,数据库本身需要内存开销较大
  5. SQL搜索有时较慢,尤其是数据库不在本地时,超慢

基本概念

索引库(Index)

一个目录一个索引库,同一文件夹中的所有的文件构成一个Lucene索引库。类似数据库的表的概念。

lucene的索引实例

段(Segment)

Lucene索引可能由多个子索引组成,这些子索引成为段。每一段都是完整独立的索引,能被搜索。

文档(Document)

一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。段是索引数据存储的单元。类似****数据库内的行****或者****文档数据库内的文档****的概念。

域(Field)

一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等。类似于****数据库表中的字段****。

词(Term)

词是索引的最小单位,是经过词法分析和语言处理后的字符串。一个Field由一个或多个Term组成。比如标题内容是“hello lucene”,经过分词之后就是“hello”,“lucene”,这两个单词就是Term的内容信息,当关键字搜索“hello”或者“lucene”的时候这个标题就会被搜索出来。

流程

Lucene检索流程.png
上一篇下一篇

猜你喜欢

热点阅读