Hack Day全文检索引擎Lucene原理

Posted 一起哔哔哔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hack Day全文检索引擎Lucene原理相关的知识,希望对你有一定的参考价值。

全文检索引擎Lucene原理

讲师介绍 —— 平台 刘国庆

preface

结构化数据:具有固定格式,有限长度,查询速度快

非结构化数据:无固定格式,不定长,扫描慢,又名全文数据

全文检索:提取出非结构化数据信息,重新整理成结构化数据,以达到快速检索的目的 , 这里整理出来的数据就是索引

Lucene介绍

Lucene是一个开放源代码的全文检索引擎工具包

提供了完整的创建和查询索引功能

下面顺着几个模块依次看它是如何实现这些功能的

【Hack Day】全文检索引擎Lucene原理
模块一:索引的结构

正向索引:索引(Index)–>段(segment)–>文档(Document)–>域(Field)–>词(Term)

倒排索引:词(Term)–>文档(Document)


【Hack Day】全文检索引擎Lucene原理

模块二:创建索引

1:准备需要索引的文档(Document)

2:把文档传给分词组件(Tokenizer),分词、去除标点和停用词

3:将得到的词元(Token)传给语言处理组件,对于英语需要转换为小写、转换为词根

4:将得到的词(Term)传给索引组件(Indexer),用得到词生成字典,并合并相同的词生成文档倒排链表


【Hack Day】全文检索引擎Lucene原理

模块三:查询数据

1. 输入查询语句

2. 词法分析检查语句、语法分析生成语法树

3. 根据语法结果检索出文档,合并


【Hack Day】全文检索引擎Lucene原理

模块四:返回结果

检索出来的结果谁排第一? 

引入概念:相关性排序,越“像”的文档排的越靠前,

反映到程序里面就是个打分的过程,文本相关性越大的分数越高

打分算法

 数学基础 

判断权重的因子是什么?

tf  :词在某个文档中出现的次数越多,该文档分数越高

tf=sqrt(freq)

idf:词在所有文档中出现的次数越多,该词分数越低

idf=log(numDocs/(docFreq+1)) + 1.0

词的权重=tf*idf

 相关性算法 

如何根据词的权重判断一个文档的权重?

把这个文档放到N维空间中:

夹角越小,余弦越大,相关性越大,打分也越高

【Hack Day】全文检索引擎Lucene原理

 公式展示 

【Hack Day】全文检索引擎Lucene原理

t: Term 、词

coord(q,d):一次搜索可能包含多个搜索词,文档命中的词越多打分越高

queryNorm(q):查询归一化,使得不同的query之间的分数可以比较

tf(t in d): t 在文档d中出现的词频

idf(t): 逆文档频率, 即t在几篇文档中出现过

norm(t, d):标准化因子,它包括三个参数:

Document boost:此值越大,说明此文档越重要

Field boost:此域越大,说明此域越重要

lengthNorm(field):一个域中包Term 总数越多,也即文档越长,此值越小,反之则反


【Hack Day】全文检索引擎Lucene原理

默认Document boost和Field boost是1,fieldNorm(lengthNorm)=1.0/sqrt(numTerms)  

索引阶段就确定了,是从索引文件里读出来的,就是该字段分词后的词越少那就评分越高

所以这种情况下norm=fieldNorm


queryWeight * fieldWeight = queryNorm*idf*tf*idf*fieldNorm

这里只命中一个搜索词:

score = queryNorm*tf*idf^2*fieldNorm*coord

【Hack Day】全文检索引擎Lucene原理

扫描二维码

关注更多精彩



以上是关于Hack Day全文检索引擎Lucene原理的主要内容,如果未能解决你的问题,请参考以下文章

Lucene索引的初步创建

深度解析 Lucene 轻量级全文索引实现原理

lucene搜索引擎的使用及原理分析

全文检索引擎原理以及Lucene简单介绍

solr使用

Lucene及全文搜索实现原理