Solr之索引
1. Lucene索引原理
Lucene建立索引的过程就是创建倒排索引表的过程
1. Lucene索引结构
1. 索引(Index)
同一个索引目录的中所有文件构成一个Lucene索引
一个索引其实是多个Document的集合
2. 文档(Document)
文档是构建索引的基本单位,索引中的每个document类似于数据库表中的每个记录
3. 域(Field)
一个Document是一个Field的集合,每个Field好比数据库表中的每个字段column
4. 段(Segment)
当添加一个新文档就会生成一个新的段,并且也会触发段文件合并
一个索引可以包含多个段文件,段与段之间是相互独立的
合并段文件有助于提升创建索引的性能
段文件里记录了索引包含多少个段,每个段包含多少个文档
索引可以由多个子索引构成,这个子索引便叫做段
5. 词(Term)
每个Field的域值经过分词器处理后得到的每一项叫做Term
它是索引中的最小单元
在两个不同field中的同一个字符串被认为是不同的term
field的域值经过序列化成Term集合
2. Lucene内部倒排索引表构建过程
1. 准备三篇文档
D0="What makes life dreary is the want of motive."
D1=" I figure life is a gift and I don't intend on wasting it."
D2=" Life is made up of small pleasures."
2. 读取每篇文档的内容,然后进行分词处理,对于英文使用空格分词,对于中文使用中文分词器进行处理。此外还需要剔除一些无意义的单词,如英文的the ,are ,at ,in ,to ,is等;还有中文的的,是 ,我。还要把所有的单词统一转换为小写。英文还有分词时态之分,要还原原来的单词。最后还要剔除标点符号。最后得到下面的信息
D0 make,life,dreary,want,motive
D1 figure,life,gift,intend,waste
D2 life,make,small,pleasure
3. 根据这些信息我们知道了哪些单词出现了多少次,在什么位置,最后得到的倒排索引结构如下
make 0,1,[5,9] 2,1,[8,11]
gift 1,1,[19,22]
0,1,[5,9] 0是文档的id,1是出现的次数,[5,9]是占用位符,也就是位置
Lucene从2.2版本以后,又添加了一个payload信息
4. 倒排索引建成以后
1. Lucene首先根据用户输入的单词对
2. Lucene常见术语
1. Indexed 是否需要创建索引
2. stored 是否需要存储某个域的域值
3. Tokenized 是否需要对某个域的域值进行分词操作
4. Norms 标准化(影响因素有三个:文档的权重,域的权重,文档中Term的总数)
3. Solr索引去重检测
4. 使用luke查看索引
https://github.com/DmitryKey/luke/releases

浙公网安备 33010602011771号