lucene倒排序索引:根据属性的值来查找记录
倒排序的步骤:
文章1:Tom lives in Guangzhou,I live guangzhou too.
文章2:He once lived in shanghai
1.取得关键词
1.1进行分词-空格分词
1.2没有实际的词进行过滤,标点符号过滤
in once too 无具体含义过滤,标点符号,过滤掉
1.3统一大小写,统一时态(过去式ed,现在进行时,将来时)
lived,lives 转换为live
最后的结果:
2.建立倒排序索引
2.1关键词(按照字符顺序排序,通过二元搜索算法快速定位)
2.2出现频率
2.3出现位置(字符位置,关键词位置),lucene采用的时关键词位置
3.lucene将上面分别作为
3.1词典文件(包含频率文件和位置文件的指针)
3.2频率文件
3.3位置文件
分别对应关键词、出现频率、出现位置
3.4使用field的概念,表达信息所在位置(如标题,文章,URL),field被记载在词典文件中,每个关键词都有一个field信息,每个关键词一定属于一个或者多个field
4.压缩算法
4.1关键词进行压缩
如: 第一个词 阿拉伯
第二个词 阿拉伯语
可以将第二个词压缩为<3,语>
4.2对数字进行压缩
数字保存与上一个值的差值
上一文章号:16382
当前文章号:16389
当前压缩后保存7(只用一个字节)
5.应用场景:
lucene先对词典二元查找,该词指向频率文件和出现位置,词典非常的小,所以整个过程时毫秒级,对比普通的顺序匹配算法,不建索引相当缓慢的。