lucene分析与应用

2008年机械工业出版社出版的图书
《lucene分析与应用》是2008年机械工业出版社出版的图书，作者是吴众欣，沈家立。
内容简介
本书介绍Lucene工作原理及应用。
本书通过对Lucene源代码的解说、辅以图表，并用一些具体实例把所有源代码进行组织与剖析，完整地展示 Lucene从建立索引到查询的过程。并通过介绍Lucene的应用，分享Lucene具体项目开发的应用环境。最后简单地介绍了Nutch和Hadoop。本书适用于搜索引擎技术人员、Lucene爱好者、对搜索引擎内核与运行机制感兴趣的读者。
前言
Google被人熟知，Baidu在中国成功推广，搜索吸引着IT界的眼球，也吸引了更多开发者的好奇心。于是诞生了Lucene，一个开源的全文检索API。并在Lucene的基础上，衍生出了一个全文检索引擎（Nutch）和分布式文件系统（Hadoop）。
大家一定很好奇，Google的搜索引擎是如何工作的？采用什么样的文件系统？……等等。但是我们无法得知。Lucene与其相关的项目Nutch和Hadoop弥补了这个不足。让我们有机会了解到搜索引擎、分布式文件系统的内部工作原理。
如果介绍一个软件或者一套框架如何使用，是比较容易说清楚的。但是要描述一个软件源代码，却不容易。老吴与家立在写作期间，辗转难眠，不知道如何表述才能够准确的把Lucene的设计精髓展现给读者，于是通过对Lucene源代码的解说、辅以图表，并通过一些具体实例把所有源代码的进行组织与剖析，完整的展示 Lucene从建立索引到查询的完整过程。并通过介绍一些Lucene的应用，和读者分享Lucene在具体项目开发正的应用环境。同时，插入一些Lucene开发实例，抛砖引玉，试图让读者也能亲自体会Lucene本身的强大功能。最后，为了进一步说明Lucene的应用环境，简单的介绍了Nutch和Hadoop。
老吴很早开始研读Lucene的源代码，并阅读了Dong Cutting的相关论文，对Lucene的内核具有深刻的认识。家立想让大家分享他和老吴的研究成果，于是决定把它写出来，家立负责lucene多处应用部分的写作。俩个人都没有写书的经验。在此之前，总觉得写书是一件很容易的事情，经历过才知道，写书的压力和工作量，远远超过开发一个项目。写书，重要的不仅仅要把自己把所写的内容搞懂，而且更重要的是需要让读者能够容易看懂。Lucene是一个很活跃的开源项目，因为老吴研究得比较早，版本以1.4.3为主。为了能够跟上Lucene的步伐，家立推荐采用了较新的1.9-2.1版本进行分析。但是该版本的内核变化比较大，因此需要重新分析、调试、总结。为了尽快完成，日日熬夜，真所谓痛并快乐着。这里非常感谢家人的支持，朋友的鼓励。
希望对搜索引擎内核与运行机制感兴趣的朋友阅读此书，由于时间仓促，难免有错，请读者批评指正。
目录
前言 3
第1章 搜索引擎与Lucene 7
1.1搜索引擎与Lucene简介 7
1.1.1 搜索引擎分类 7
1.1.2 Lucene项目简介 12
1.1.3 其他搜索引擎开发包介绍 12
1.2 Lucene的系统架构 15
1.2.1 Lucene最简示例 15
1.2.2 Lucene采用的索引结构 21
1.2.3 Lucene软件包架构 22
1.3 本书的章节导航 23
第2章 文档逻辑视图与文本分析 25
2.1 文档逻辑视图 25
2.2 Lucene的文本分析过程简介 29
2.3 空格解析器（WhitespaceAnalyzer） 31
2.3.1 空格分词器（WhitespaceTokenizer） 31
2.3.2 Token（标志） 34
2.4 标准解析器（StandardAnalyzer） 34
2.4.1 标准分词器（StandardTokenizer） 37
2.4.2 标准过滤器（StandardFilter） 39
2.5 打造自己的解析器 41
2.5.1 常用的中文分词法 41
2.5.2 对CJKAnalyzer 的分析 42
2.5.3 构造自己的解析器 43
第3章 Lucene创建索引之1（段索引方式与倒排索引结构） 54
3.1 倒排（inverted index）结构与段索引（segment index）方式 54
3.2 索引写入过程概述 66
第4章 Lucene创建索引之2（内存中创建索引） 69
4.1 创建Document层面索引 70
4.2 写入field信息 74
4.3 文件倒排过程 77
4.4 填写postingTable 84
4.5 postingTable的排序过程 89
4.6 写入Field名字文件（.fnm文件） 93
4.7 写入field信息文件（.fdt，.fdx文件） 96
4.8写入频率与位置文件（.frq与.prx文件） 102
4.9 TermVector方式写入索引（.tvf，.tvd与.tvx文件） 111
4.10字典文件（.tis与.tii文件） 123
4.11写入规格化文件 129
第5章 Lucene创建索引之3（索引合并过程） 131
5.1 Document层面的合并过程。 133
5.2 Field与term的合并过程 143
5.2.1 Field信息合并过程 144
5.2.2 Term信息合并过程 147
5.2.3合并Norm信息 167
5.3 Lunece索引采用的压缩算法 170
5.4小结 173
第6章 Lucene查询过程之1（查询模型与引擎预热） 175
6.1查询模型 175
6.1.1向量（Vector）模型 175
6.1.2布尔（Boolean）模型 176
6.1.3 Lucene的查询（query）评分（score）方式 177
6.2 查询简单示例 178
6.3 引擎预热 182
6.3.1 获得并打开索引文件 183
6.3.2 获得segment信息 187
6.3.3 FSDirectory打开索引过程 207
6.3.4 获得field信息 213
6.3.5 获得Term信息 218
第7章 Lucene查询过程之2（查询解析与语法） 225
7.1 构建查询解析器（QueryParser） 225
7.2 Lucene的查询语法 225
7.2.1项（Term）查询 226
7.2.2 域(Fields) 226
7.2.3词条查询(Term Modifiers) 227
7.2.4布尔操作符(Boolean Operators) 229
7.2.5 组合查询（Grouping） 231
7.2.6针对Field的组合查询（Field Grouping Field） 231
7.2.7 Escaping Special Characters（转意字符） 231
7.3 Lucene查询语法树的构建过程 231
7.3.1 过程分析 232
7.3.2 语法树分析实例 237
第8章 Lucene查询过程之3（相似度匹配与算法分析） 239
8.1 查询与相似度计算 239
8.1.1 查询器（Searcher）的查询过程 240
8.1.2 查询语句的权重计算 242
8.1.3 获得TopK个document 260
8.2 Lucene查询算法分析 294
8.2.1相似度计算简单实例（tf×idf） 294
8.2.2 线性相似度计算 296
8.2.3 基于倒排索引的相似度计算 297
8.2.4 Lucene的相似度计算 299
第9章 Lucene标引与查询全程示例 305
9.1实例描述 305
9.2 建立索引过程 306
9.2.1 选择文档中建立索引的field 306
9.2.2 选择field录入方式 307
9.2.3 生成segment文件 307
9.2.4 生成fields文件 307
9.2.5 posting文件 309
9.2.6 合并segment index生成index文件 313
9.2.6 合并后的文件关系 326
9.3 查询过程 327
第10章 Lucene的常用应用场景分析 329
10.1 对大型XML文档集合的检索 329
10.1.1 都柏林文件介绍 329
元素名称：题名(Title) 329
元素名称： 创建者(Creator) 329
10.1.2 XML分析器介绍 332
10.1.3 Lucene在大型XML文件应用 333
10.2 MultiSearcher的应用 340
10.2.1 MultiSearcher的应用 341
10.2.2 ParallelMultiSearcher的应用 348
第11章 利用Lucene构建分布式搜索引擎350
11.1 分布式文件系统和Hadoop 350
11.1.1 Hadoop文件系统体系结构351
11.1.2 系统交互过程：单一NameNode方式 351
11.1.3 系统组件描述 352
11.2 Nutch简单剖析 360
11.3 体验Nutch 363
资源的抓取 364
附录A TestIndexWriterMerging 372
附录B TestDocumentWriter与DocHelper 374