首页

《Lucene原理与代码分析》PDF版本下载

标签:Lucene原理,代码分析,Lucene架构,JavaCC,QueryParser,分词器Analyzer     发布时间:2017-11-22   
  • 云盘下载:
  • [提取码:0000]
  • 本地下载:
       ( 需积分:2  )

一、目录介绍

Lucene原理与代码分析 副本.jpg

第一篇  原理篇    9
第一章  全文检索的基本原理    10
一、总论    10
二、索引里面究竟存些什么    13
三、如何创建索引    14
第一步:一些要索引的原文档(Document)    14
第二步:将原文档传给分次组件(Tokenizer)    14
第三步:将得到的词元(Token)传给语言处理组件(Linguistic Processor)    15
第四步:将得到的词(Term)传给索引组件(Indexer)    16
     1. 利用得到的词(Term)创建一个字典    16
     2. 对字典按字母顺序进行排序    17
     3. 合并相同的词(Term)成为文档倒排(Posting List)链表    18
四、如何对索引进行搜索    20
第一步:用户输入查询语句    21
第二步:对查询语句进行词法分析,语法分析,及语言处理    21
     1.词法分析主要用来识别单词和关键字    21
     2.语法分析主要是根据查询语句的语法规则来形成一棵语法树    21
     3.语言处理同索引过程中的语言处理几乎相同    22
第三步:搜索索引,得到符合语法树的文档    22
第四步:根据得到的文档和查询语句的相关性,对结果进行排序    23
     1.计算权重(Term weight)的过程    24
     2.判断 Term 之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(VSM)    25

第二章:Lucene 的总体架构    29
第二篇:代码分析篇    34
第三章:Lucene 的索引文件格式    35
一、基本概念    35
二、基本类型    38
三、基本规则    39
 1. 前缀后缀规则(Prefix+Suffix)    39
 2. 差值规则(Delta)    40
 3. 或然跟随规则(A, B?)    41
 4. 跳跃表规则(Skip list)    42
四、具体格式    44
4.1. 正向信息    44
4.1.1. 段的元数据信息(segments_N)    44
4.1.2. 域(Field)的元数据信息(.fnm)    60
4.1.3. 域(Field)的数据信息(.fdt,.fdx)    66
4.1.3. 词向量(Term Vector)的数据信息(.tvx,.tvd,.tvf)    69
4.2. 反向信息    72
4.2.1. 词典(tis)及词典索引(tii)信息    72
4.2.2. 文档号及词频(frq)信息    74
4.2.3. 词位置(prx)信息    78
4.3. 其他信息   79
4.3.1. 标准化因子文件(nrm)    79
4.3.2. 删除文档文件(del)    81
五、总体结构    82

第四章:Lucene 索引过程分析    84
一、索引过程体系结构    84
二、详细索引过程    86
 1、创建 IndexWriter 对象    86
 2、创建文档 Document 对象,并加入域(Field)    100
 3、将文档加入 IndexWriter    103
 4、将文档加入 DocumentsWriter    103
4.1、得到当前线程对应的文档集处理对象(DocumentsWriterThreadState)    111
4.2、用得到的文档集处理对象(DocumentsWriterThreadState)处理文档    113
4.3、用 DocumentsWriter.finishDocument 结束本次文档添加    132
5、DocumentsWriter 对CharBlockPool,ByteBlockPool,IntBlockPool 的缓存管理    132
6、关闭 IndexWriter 对象   146
6.1、得到要写入的段名      147
6.2、将缓存的内容写入段    148
6.3、生成新的段信息对象    169
6.4、准备删除文档          169
6.5、生成 cfs 段           169
6.6、删除文档              170

第五章:Lucene 段合并(merge)过程分析    174
一、段合并过程总论    174
1.1、合并策略对段的选择     175
1.2、反向信息的合并     182
二、段合并的详细过程    191
2.1、将缓存写入新的段   191
2.2、选择合并段,生成合并任务   192
2.2.1、用合并策略选择合并段   192
2.2.2、注册段合并任务     198
2.3、段合并器进行段合并   199
2.3.1、合并存储域       201
2.3.2、合并标准化因子   206
2.3.3、合并词向量       207
2.3.4、合并词典和倒排表   210

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

第七章:Lucene 搜索过程解析     222
一、Lucene 搜索过程总论    222
二、Lucene 搜索详细过程    223
2.1、打开 IndexReader 指向索引文件夹  223
2.1.1、找到最新的 segment_N 文件      223
2.1.2、通过 segment_N 文件中保存的各个段的信息打开各个段     225
2.1.3、得到的 IndexReader 对象如下     228
2.2、打开 IndexSearcher     236
2.3、QueryParser 解析查询语句生成查询对象   237
2.4、搜索查询对象   242
2.4.1、创建Weight 对象树,计算 Term Weight   243
2.4.2、创建 Scorer 及 SumScorer 对象树   268
2.4.3、进行倒排表合并   288
2.4.4、收集文档结果集合及计算打分    318
2.4.5、Lucene 如何在搜索阶段读取索引信息    324

第八章:Lucene 的查询语法,JavaCC 及 QueryParser    330
一、Lucene 的查询语法    330
二、JavaCC 介绍    332
2.1、第一个实例——正整数相加    334
2.2、扩展语法分析器         339
2.3、第二个实例:计算器     344
三、解析 QueryParser.jj     357
3.1、声明 QueryParser 类    357
3.2、声明词法分析器      357
3.3、声明语法分析器      360

第九章:Lucene 的查询对象   376
1、BoostingQuery     376
2、CustomScoreQuery     381
3、MoreLikeThisQuery     385
4、MultiTermQuery        394
4.1、TermRangeQuery     394
4.2、NumericRangeQuery    397
5、SpanQuery     399
5.1、SpanFirstQuery    400
5.2、SpanNearQuery     401
5.3、SpanNotQuery      408
5.4、SpanOrQuery       411
5.5、FieldMaskingSpanQuery     411
5.6、PayloadTermQuery 及PayloadNearQuery    414
6、FilteredQuery     416
6.1、TermsFilter     416
6.2、BooleanFilter   417
6.3、DuplicateFilter      419
6.4、FieldCacheRangeFilter<T>及 FieldCacheTermsFilter    425
6.5、MultiTermQueryWrapperFilter<Q>      432
6.6、QueryWrapperFilter       433
6.7、SpanFilter       434
6.7.1、SpanQueryFilter     434
6.7.2、CachingSpanFilter     435

第十章:Lucene 的分词器Analyzer    437
1、抽象类 Analyzer    437
2、TokenStream 抽象类    438
3、几个具体的 TokenStream     439
3.1、NumericTokenStream       439
3.2、SingleTokenTokenStream    441
4、Tokenizer 也是一种 TokenStream     442
4.1、CharTokenizer    442
4.2、ChineseTokenizer    445
4.3、KeywordTokenizer    446
4.4、CJKTokenizer     447
4.5、SentenceTokenizer     451
5、TokenFilter 也是一种TokenStream    454
5.1、ChineseFilter     454
5.2、LengthFilter      456
5.3、LowerCaseFilter     457
5.4、NumericPayloadTokenFilter     458
5.5、PorterStemFilter       458
5.6、ReverseStringFilter    460
5.7、SnowballFilter         462
5.8、TeeSinkTokenFilter     464
6、不同的 Analyzer 就是组合不同的 Tokenizer 和 TokenFilter 得到最后的 TokenStream    469
6.1、ChineseAnalyzer     469
6.2、CJKAnalyzer         469
6.3、PorterStemAnalyzer     470
6.4、SmartChineseAnalyzer   470
6.5、SnowballAnalyzer       470
7、Lucene 的标准分词器      471
7.1、StandardTokenizerImpl.jflex    471
7.2、StandardTokenizer     475
7.3、StandardFilter        476
7.4、StandardAnalyzer      477
8、不同的域使用不同的分词器      479
8.1、PerFieldAnalyzerWrapper     479
第三篇:问题篇        482
问题一:为什么能搜的到“中华 AND 共和国”却搜不到“中华共和国”?     483
问题二:stemming 和 lemmatization 的关系       487
问题三:影响 Lucene 对文档打分的四种方式       493
在索引阶段设置 Document Boost 和 Field Boost,存储在(.nrm)文件中     493
在搜索语句中,设置 Query Boost     499
继承并实现自己的 Similarity     501
继承并实现自己的 collector      514
问题四:Lucene 中的TooManyClause 异常    517
问题五:Lucene 的事务性    519
问题六:用 Lucene 构建实时的索引     521
1、初始化阶段     521
2、合并索引阶段     522
3、重新打开硬盘索引的 IndexReader     523
4、替代 IndexReader     524
5、多个索引     525

��
  • ◆ 相关内容