CODE大全
版权声明:本文为博主原创文章,未经博主允许不得转载。

lucene原理与代码分析完整版pdf下载

发布时间:『 2017-08-23 17:42』  博客类别:资源下载  阅读(1462) 评论(0)

Lucene 原理与代码分析系列文章已经基本告一段落,可能问题篇还会有新的更新。 完整版pdf可由以附件下载。 

目录如下: 

第一篇:原理篇 

第一章:全文检索的基本原理 

一、总论 

二、索引里面究竟存些什么 

三、如何创建索引 

第一步:一些要索引的原文档(Document)。 

第二步:将原文档传给分次组件(Tokenizer)。 

第三步:将得到的词元(Token)传给语言处理组件(Linguistic Processor)。 

第四步:将得到的词(Term)传给索引组件(Indexer)。

1. 利用得到的词(Term)创建一个字典。 

2. 对字典按字母顺序进行排序。 

3. 合并相同的词(Term)成为文档倒排(Posting List)链表。 

四、如何对索引进行搜索?

第一步:用户输入查询语句。 

第二步:对查询语句进行词法分析,语法分析,及语言处理。 

1. 词法分析主要用来识别单词和关键字。 

2. 语法分析主要是根据查询语句的语法规则来形成一棵语法树。 

3. 语言处理同索引过程中的语言处理几乎相同。 

第三步:搜索索引,得到符合语法树的文档。 

第四步:根据得到的文档和查询语句的相关性,对结果进行排序。 

1. 计算权重(Term weight)的过程。 

2. 判断Term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(VSM)。 

第二章:Lucene的总体架构 

第二篇:代码分析篇 

第三章:Lucene的索引文件格式 

一、基本概念 

二、基本类型 

三、基本规则 

1. 前缀后缀规则(Prefix+Suffix) 

2. 差值规则(Delta) 

3. 或然跟随规则(A, B?) 

4. 跳跃表规则(Skip list) 

四、具体格式 

4.1. 正向信息 

4.1.1. 段的元数据信息(segments_N)

4.1.2. 域(Field)的元数据信息(.fnm) 

4.1.3. 域(Field)的数据信息(.fdt,.fdx) 

4.1.3. 词向量(Term Vector)的数据信息(.tvx,.tvd,.tvf) 

4.2. 反向信息 

4.2.1. 词典(tis)及词典索引(tii)信息 

4.2.2. 文档号及词频(frq)信息

4.2.3. 词位置(prx)信息 

4.3. 其他信息 

4.3.1. 标准化因子文件(nrm) 

4.3.2. 删除文档文件(del) 

五、总体结构 

第四章:Lucene索引过程分析

一、索引过程体系结构 

二、详细索引过程 

1、创建IndexWriter对象 

2、创建文档Document对象,并加入域(Field) 

3、将文档加入IndexWriter 

4、将文档加入DocumentsWriter 

4.1、得到当前线程对应的文档集处理对象(DocumentsWriterThreadState) 

4.2、用得到的文档集处理对象(DocumentsWriterThreadState)处理文档 

4.3、用DocumentsWriter.finishDocument结束本次文档添加 

5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理 

6、关闭IndexWriter对象 

6.1、得到要写入的段名 

6.2、将缓存的内容写入段 

6.3、生成新的段信息对象 

6.4、准备删除文档 

6.5、生成cfs段 

6.6、删除文档 

第五章:Lucene段合并(merge)过程分析 

一、段合并过程总论 

1.1、合并策略对段的选择 

1.2、反向信息的合并 

二、段合并的详细过程 

2.1、将缓存写入新的段 

2.2、选择合并段,生成合并任务 

2.2.1、用合并策略选择合并段 

2.2.2、注册段合并任务 

2.3、段合并器进行段合并 

2.3.1、合并存储域 

2.3.2、合并标准化因子 

2.3.3、合并词向量 

2.3.4、合并词典和倒排表 

第六章:Lucene打分公式的数学推导 

第七章:Lucene搜索过程解析 

一、Lucene搜索过程总论 

二、Lucene搜索详细过程 

2.1、打开IndexReader指向索引文件夹 

2.1.1、找到最新的segment_N文件 

2.1.2、通过segment_N文件中保存的各个段的信息打开各个段 

2.1.3、得到的IndexReader对象如下 

2.2、打开IndexSearcher 

2.3、QueryParser解析查询语句生成查询对象 

2.4、搜索查询对象 

2.4.1、创建Weight对象树,计算Term Weight

2.4.2、创建Scorer及SumScorer对象树 

2.4.3、进行倒排表合并 

2.4.4、收集文档结果集合及计算打分 

2.4.5、Lucene如何在搜索阶段读取索引信息 

第八章:Lucene的查询语法,JavaCC及QueryParser 

一、Lucene的查询语法 

二、JavaCC介绍 

2.1、第一个实例——正整数相加 

2.2、扩展语法分析器 

2.3、第二个实例:计算器 

三、解析QueryParser.jj 

3.1、声明QueryParser类 

3.2、声明词法分析器 

3.3、声明语法分析器 

第九章:Lucene的查询对象 

1、BoostingQuery 

2、CustomScoreQuery 

3、MoreLikeThisQuery 

4、MultiTermQuery 

4.1、TermRangeQuery 

4.2、NumericRangeQuery 

5、SpanQuery 

5.1、SpanFirstQuery 

5.2、SpanNearQuery 

5.3、SpanNotQuery 

5.4、SpanOrQuery 

5.5、FieldMaskingSpanQuery 

5.6、PayloadTermQuery及PayloadNearQuery 

6、FilteredQuery 

6.1、TermsFilter 

6.2、BooleanFilter 

6.3、DuplicateFilter 

6.4、FieldCacheRangeFilter<T>及FieldCacheTermsFilter 

6.5、MultiTermQueryWrapperFilter<Q> 

6.6、QueryWrapperFilter 

6.7、SpanFilter 

6.7.1、SpanQueryFilter 

6.7.2、CachingSpanFilter 

第十章:Lucene的分词器Analyzer 

1、抽象类Analyzer 

2、TokenStream抽象类 

3、几个具体的TokenStream 

3.1、NumericTokenStream 

3.2、SingleTokenTokenStream 

4、Tokenizer也是一种TokenStream 

4.1、CharTokenizer 

4.2、ChineseTokenizer 

4.3、KeywordTokenizer 

4.4、CJKTokenizer 

4.5、SentenceTokenizer 

5、TokenFilter也是一种TokenStream 

5.1、ChineseFilter 

5.2、LengthFilter 

5.3、LowerCaseFilter 

5.4、NumericPayloadTokenFilter 

5.5、PorterStemFilter 

5.6、ReverseStringFilter 

5.7、SnowballFilter 

5.8、TeeSinkTokenFilter 

6、不同的Analyzer就是组合不同的Tokenizer和TokenFilter得到最后的TokenStream 

6.1、ChineseAnalyzer 

6.2、CJKAnalyzer 

6.3、PorterStemAnalyzer 

6.4、SmartChineseAnalyzer

6.5、SnowballAnalyzer 

7、Lucene的标准分词器 

7.1、StandardTokenizerImpl.jflex 

7.2、StandardTokenizer 

7.3、StandardFilter 

7.4、StandardAnalyzer

8、不同的域使用不同的分词器 

8.1、PerFieldAnalyzerWrapper 

第三篇:问题篇 

问题一:为什么能搜的到“中华 AND 共和国”却搜不到“中华共和国”? 

问题二:stemming和lemmatization的关系 

问题三:影响Lucene对文档打分的四种方式 在索引阶段设置Document Boost和Field Boost,存储在(.nrm)文件中。 在搜索语句中,设置Query Boost. 继承并实现自己的Similarity 继承并实现自己的collector 

问题四:Lucene中的TooManyClause异常 

问题五:Lucene的事务性 

问题六:用Lucene构建实时的索引 

1、初始化阶段 

2、合并索引阶段 

3、重新打开硬盘索引的IndexReader 

4、替代IndexReader 

5、多个索引

资源下载链接:http://pan.baidu.com/s/1nvaCsBJ 密码:nrs8


——— 全文完 ———
如有版权问题,请联系532009913@qq.com。
关键字:   lucene     java  
评论信息
暂无评论
发表评论
验证码: 
Powered by CODE大全 | 鄂ICP备14009759号-2 | 网站留言 Copyright © 2014-2016 CODE大全 版权所有