lucene

1,全文检索算法(倒排索引算法):

将文件中的内容提取出来, 将文字拆封成一个一个的词(分词), 将这些词组成索引(字典中的目录), 搜索的时候先搜索索引,通过索引找文档,这个过程就叫做全文检索.

 

分词: 去掉停用词(a, an, the ,, , , , ,呵呵),因为搜索的时候搜索这些词没有意义,将句子拆分成词,去掉标点符号和空格

优点: 搜索速度快

缺点: 因为创建的索引需要占用磁盘空间,所以这个算法会使用掉更多的磁盘空间,这是用空间换时间

 

2, 索引和搜索流程图

 

2.1、绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:

确定原始内容即要搜索的内容à采集文档à创建文档à分析文档à索引文档

 

2.2、红色表示搜索过程,从索引库中搜索内容,搜索过程包括:

用户通过搜索界面à创建查询à执行搜索,从索引库搜索à渲染搜索结果

 

3,域的详细介绍

是否分词:

分词的作用是为了索引

需要分词: 文件名称, 文件内容

不需要分词: 不需要索引的域不需要分词,还有就是分词后无意义的域不需要分词

  比如: id, 身份证号

 

是否索引:

索引的的目的是为了搜索.

需要搜索的域就一定要创建索引,只有创建了索引才能被搜索出来

不需要搜索的域可以不创建索引

需要索引: 文件名称, 文件内容, id, 身份证号等

不需要索引: 比如图片地址不需要创建索引, e:\\xxx.jpg

因为根据图片地址搜索无意义

 

是否存储:

存储的目的是为了显示.

是否存储看个人需要,存储就是将内容放入Document文档对象中保存出来,会额外占用磁盘空间, 如果搜索的时候需要马上显示出来可以放入document中也就是要存储,这样查询显示速度快, 如果不是马上立刻需要显示出来,则不需要存储,因为额外占用磁盘空间不划算.

如复制域可以不需要store

 

4,索引表结构

 

 

5,索引原理

 

接下来主要讲上图中词典的实现:

 

个人理解:最右边的圆类似上图中的倒排表,再来一个mop时,直接添加值即可。

除了FST,还有B+树,MySQL也是采用这种方式,B+树特点是:

1,所有记录的节点都在叶节点中,并且是顺序存放的

2,所有记录节点都是按照键值的大小顺序存放在同一层的叶节点中,各个叶子节点通过指针进行连接。由于一个节点中存放了多条的数据,那么检索的时候,进行的磁盘IO次数将会少掉很多

 

 

 

posted @ 2019-04-03 15:31  song123666  阅读(101)  评论(0编辑  收藏  举报