【好书推介】Lucene实战(第2版)
Lucene实战(第2版)
- 出版社: 人民邮电出版社; 第1版 (2011年6月1日)
- 平装: 454页
- 正文语种: 简体中文
- 开本: 16
- ISBN: 7115251770, 9787115251770
- 条形码: 9787115251770
- 商品尺寸: 23.2 x 18.4 x 2.2 cm
- 商品重量: 662 g
- ASIN: B0053FPAGQ
内容简介
Michael McCandless的《Lucene实战(第2版)》基于Apache的Lucene 3.0,从Lucene核心、Lucene应用、案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene、建立索引、为应用程序添加搜索功能、高级搜索技术、扩展搜索、使用tika提取文本、Lucene的高级扩展、使用其他编程语言访问Lucene、Lucene管理和性能调优等内容,最后还提供了三大经典成功案例,为读者展示了一个奇妙的搜索世界。
《Lucene实战(第2版)》适合于已具有一定Java编程基本的读者,以及希望能够把强大的搜索功能添加到自己的应用程序中的开发人员。本书对于从事搜索引擎工作的工程技术人员,以及在Java平台上进行各类软件开发的人员和编程爱好者,也具有很好的学习参考价值。
《Lucene实战(第2版)》适合于已具有一定Java编程基本的读者,以及希望能够把强大的搜索功能添加到自己的应用程序中的开发人员。本书对于从事搜索引擎工作的工程技术人员,以及在Java平台上进行各类软件开发的人员和编程爱好者,也具有很好的学习参考价值。
目录
第1部分 Lucene核心
第1章 初识Lucene 3
1.1 应对信息爆炸 4
1.2 Lucene是什么 5
1.2.1 Lucene能做些什么 6
1.2.2 Lucene的历史 7
1.3 Lucene和搜索程序组件 9
1.3.1 索引组件 10
1.3.2 搜索组件 13
1.3.3 搜索程序的其他模块 16
1.3.4 Lucene与应用程序的整合点 18
1.4 Lucene实战:程序示例 18
1.4.1 建立索引 19
1.4.2 搜索索引 22
1.5 理解索引过程的核心类 25
1.5.1 IndexWriter 25
1.5.2 Directory 25
1.5.3 Analyzer 26
1.5.4 Document 26
1.5.5 Field 27
1.6 理解搜索过程的核心类 27
1.6.1 IndexSearcher 27
1.6.2 Term 28
1.6.3 Query 28
1.6.4 TermQuery 28
1.6.5 TopDocs 29
1.7 小结 29
第2章 构建索引 30
2.1 Lucene如何对搜索内容进行建模 31
2.1.1 文档和域 31
2.1.2 灵活的架构 32
2.1.3 反向规格化(Denormalization) 32
2.2 理解索引过程 33
2.2.1 提取文本和创建文档 33
2.2.2 分析文档 34
2.2.3 向索引添加文档 34
2.3 基本索引操作 35
2.3.1 向索引添加文档 35
2.3.2 删除索引中的文档 38
2.3.3 更新索引中的文档 39
2.4 域选项 41
2.4.1 域索引选项 41
2.4.2 域存储选项 42
2.4.3 域的项向量选项 42
2.4.4 Reader、TokenStream和byte[ ]域值 42
2.4.5 域选项组合 43
2.4.6 域排序选项 44
2.4.7 多值域 44
2.5 对文档和域进行加权操作 45
2.5.1 文档加权操作 45
2.5.2 域加权操作 46
2.5.3 加权基准(Norms) 47
2.6 索引数字、日期和时间 48
2.6.1 索引数字 48
2.6.2 索引日期和时间 49
2.7 域截取(Field truncation) 50
2.8 近实时搜索(Near-real-time search) 51
2.9 优化索引 51
2.10 其他Directory子类 52
2.11 并发、线程安全及锁机制 55
2.11.1 线程安全和多虚拟机安全 55
2.11.2 通过远程文件系统访问索引 56
2.11.3 索引锁机制 57
2.12 调试索引 59
2.13 高级索引概念 60
2.13.1 用IndexReader删除文档 61
2.13.2 回收被删除文档所使用过的磁盘空间 62
2.13.3 缓冲和刷新 62
2.13.4 索引提交 63
2.13.5 ACID事务和索引连续性 65
2.13.6 合并段 66
2.14 小结 68
第3章 为应用程序添加搜索功能 70
3.1 实现简单的搜索功能 71
3.1.1 对特定项的搜索 72
3.1.2 解析用户输入的查询表达式:QueryParser 73
3.2 使用IndexSearcher类 76
3.2.1 创建IndexSearcher类 76
3.2.2 实现搜索功能 78
3.2.3 使用TopDocs类 78
3.2.4 搜索结果分页 79
3.2.5 近实时搜索 79
3.3 理解Lucene的评分机制 81
3.3.1 Lucene如何评分 81
3.3.2 使用explain()理解搜索结果评分 83
3.4 Lucene的多样化查询 84
3.4.1 通过项进行搜索:TermQuery类 85
3.4.2 在指定的项范围内搜索:TermRangeQuery类 86
3.4.3 在指定的数字范围内搜索:NumericRangeQuery类 87
3.4.4 通过字符串搜索:PrefixQuery类 88
3.4.5 组合查询:BooleanQuery类 88
3.4.6 通过短语搜索:PhraseQuery类 91
3.4.7 通配符查询:WildcardQuery类 93
3.4.8 搜索类似项:FuzzyQuery类 94
3.4.9 匹配所有文档:MatchAllDocsQuery类 95
3.5 解析查询表达式:QueryParser 96
3.5.1 Query.toString方法 97
3.5.2 TermQuery 97
3.5.3 项范围查询 98
3.5.4 数值范围搜索和日期范围搜索 99
3.5.5 前缀查询和通配符查询 99
3.5.6 布尔操作符 100
3.5.7 短语查询 100
3.5.8 模糊查询 101
3.5.9 MatchAllDocsQuery 102
3.5.10 分组查询 102
3.5.11 域选择 103
3.5.12 为子查询设置加权 103
3.5.13 是否一定要使用QueryParse 103
3.6 小结 104
第4章 Lucene的分析过程 105
4.1 使用分析器 106
4.1.1 索引过程中的分析 107
4.1.2 QueryParser分析 109
4.1.3 解析vs分析:分析器何时不再适用 109
4.2 剖析分析器 110
4.2.1 语汇单元的组成 111
4.2.2 语汇单元流揭秘 112
4.2.3 观察分析器 115
4.2.4 语汇单元过滤器:过滤顺序的重要性 119
4.3 使用内置分析器 121
4.3.1 StopAnalyzer 122
4.3.2 StandardAnalyzer 122
4.3.3 应当采用哪种核心分析器 123
4.4 近音词查询 123
4.5 同义词、别名和其他表示相同意义的词 126
4.5.1 创建SynonymAnalyzer 127
4.5.2 显示语汇单元的位置 131
4.6 词干分析 132
4.6.1 StopFilter保留空位 133
4.6.2 合并词干操作和停用词移除操作 134
4.7 域分析 134
4.7.1 多值域分析 135
4.7.2 特定域分析 135
4.7.3 搜索未被分析的域 136
4.8 语言分析 139
4.8.1 Unicode与字符编码 139
4.8.2 非英语语种分析 140
4.8.3 字符规范化处理 140
4.8.4 亚洲语种分析 141
4.8.5 有关非英语语种分析的其他问题 143
4.9 Nutch分析 144
4.10 小结 146
第5章 高级搜索技术 147
5.1 Lucene域缓存 148
5.1.1 为所有文档加载域值 149
5.1.2 段对应的reader 149
5.2 对搜索结果进行排序 150
5.2.1 根据域值进行排序 150
5.2.2 按照相关性进行排序 153
5.2.3 按照索引顺序进行排序 154
5.2.4 通过域进行排序 154
5.2.5 倒排序 155
5.2.6 通过多个域进行排序 156
5.2.7 为排序域选择类型 157
5.2.8 使用非默认的locale方式进行排序 157
5.3 使用MultiPhraseQuery 158
5.4 针对多个域的一次性查询 160
5.5 跨度查询 162
5.5.1 跨度查询的构建模块:SpanTermQuery 165
5.5.2 在域的起点查找跨度 166
5.5.3 彼此相邻的跨度 167
5.5.4 在匹配结果中排除重叠的跨度 169
5.5.5 SpanOrQuery类 170
5.5.6 SpanQuery类和QueryParser类 171
5.6 搜索过滤 172
5.6.1 TermRangeFilter 173
5.6.2 NumericRangeFilter 174
5.6.3 FieldCacheRangeFilter 174
5.6.4 特定项过滤 174
5.6.5 使用QueryWrapperFilter类 175
5.6.6 使用SpanQueryFilter类 175
5.6.7 安全过滤器 176
5.6.8 使用BooleanQuery类进行过滤 177
5.6.9 PrefixFilter 178
5.6.10 缓存过滤结果 178
5.6.11 将filter封装成query 179
5.6.12 对过滤器进行过滤 179
5.6.13 非Lucene内置的过滤器 180
5.7 使用功能查询实现自定义评分 180
5.7.1 功能查询的相关类 180
5.7.2 使用功能查询对最近修改过的文档进行加权 182
5.8 针对多索引的搜索 184
5.8.1 使用MultiSearch类 184
5.8.2 使用ParallelMultiSearcher进行多线程搜索 186
5.9 使用项向量 186
5.9.1 查找相似书籍 187
5.9.2 它属于哪个类别 190
5.9.3 TermVectorMapper类 193
5.10 使用FieldSelector加载域 194
5.11 停止较慢的搜索 195
5.12 小结 196
第6章 扩展搜索 198
6.1 使用自定义排序方法 199
6.1.1 针对地理位置排序方式进行文档索引 199
6.1.2 实现自定义的地理位置排序方式 200
6.1.3 访问自定义排序中的值 203
6.2 开发自定义的Collector 204
6.2.1 Collector基类 205
6.2.2 自定义Collector:BookLinkCollector 206
6.2.3 AllDocCollector类 207
6.3 扩展QueryParser类 208
6.3.1 自定义QueryParser的行为 208
6.3.2 禁用模糊查询和通配符查询 209
6.3.3 处理数值域的范围查询 210
6.3.4 处理日期范围 211
6.3.5 对已排序短语进行查询 213
6.4 自定义过滤器 215
6.4.1 实现自定义过滤器 215
6.4.2 搜索期间使用自定义过滤器 216
6.4.3 另一种选择:FilterQuery类 217
6.5 有效载荷(Payloads) 218
6.5.1 分析期间生成有效载荷 219
6.5.2 搜索期间使用有效载荷 220
6.5.3 有效载荷和跨度查询 223
6.5.4 通过TermPositions来检索有效载荷 223
6.6 小结 223
第2部分 Lucene应用
第7章 使用Tika提取文本 227
7.1 Tika是什么 228
7.2 Tika的逻辑设计和API 230
7.3 安装Tika 231
7.4 Tika的内置文本提取工具 232
7.5 编程实现文本提取 234
7.5.1 索引Lucene文档 234
7.5.2 Tika工具类 237
7.5.3 选择自定义分析器 238
7.6 Tika的局限 238
7.7 索引自定义的XML文件 239
7.7.1 使用SAX进行解析 239
7.7.2 使用Apache Commons Digester进行解析和索引 242
7.8 其他选择 244
7.9 小结 245
第8章 Lucene基本扩展 246
8.1 Luke:Lucene的索引工具箱 247
8.1.1 Overview标签页:索引的全局视图 248
8.1.2 浏览文档 249
8.1.3 使用QueryParser进行搜索 251
8.1.4 Files and Plugins标签页 252
8.2 分析器、语汇单元器和语汇单元过滤器 253
8.2.1 SnowballAnalyzer 255
8.2.2 Ngram过滤器 256
8.2.3 Shingle过滤器 258
8.2.4 获取捐赠分析器 258
8.3 高亮显示查询项 259
8.3.1 高亮显示模块 259
8.3.2 独立的高亮显示示例 262
8.3.3 使用CSS进行高亮显示处理 263
8.3.4 高亮显示搜索结果 264
8.4 FastVector Highlighter类 266
8.5 拼写检查 269
8.5.1 生成提示列表 269
8.5.2 选择最佳提示 271
8.5.3 向用户展示搜索结果 272
8.5.4 一些加强拼写检查的考虑 273
8.6 引人注目的查询扩展功能 274
8.6.1 MoreLikeThis 274
8.6.2 FuzzyLikeThisQuery 275
8.6.3 BoostingQuery 275
8.6.4 TermsFilter 276
8.6.5 DuplicateFilter 276
8.6.6 RegexQuery 276
8.7 构建软件捐赠模块(contrib module) 277
8.7.1 源代码获取方式 277
8.7.2 contrib目录的Ant插件 277
8.8 小结 278
第9章 Lucene高级扩展 279
9.1 链式过滤器 280
9.2 使用Berkeley DB存储索引 282
9.3 WordNet同义词 284
9.3.1 建立同义词索引 285
9.3.2 将WordNet同义词链接到分析器中 287
9.4 基于内存的快速索引 289
9.5 XML QueryParser:超出“one box”的搜索接口 289
9.5.1 使用XmlQueryParser 291
9.5.2 扩展XML查询语法 295
9.6 外围查询语言 296
9.7 Spatial Lucene 298
9.7.1 索引空间数据 299
9.7.2 搜索空间数据 302
9.7.3 Spatial Lucene的性能特点 304
9.8 远程进行多索引搜索 306
9.9 灵活的QueryParser 309
9.10 其他内容 312
9.11 小结 313
第10章 其他编程语言使用Lucene 314
10.1 移植入门 315
10.1.1 移植取舍 316
10.1.2 选择合适的移植版本 317
10.2 CLucene(C++) 317
10.2.1 移植目的 318
10.2.2 API和索引兼容 319
10.2.3 支持的平台 321
10.2.4 当前情况以及未来展望 321
10.3 Lucene.Net(C#和其他.NET编程语言) 321
10.3.1 API兼容 323
10.3.2 索引兼容 324
10.4 KinoSearch和Lucy(Perl) 324
10.4.1 KinoSearch 325
10.4.2 Lucy 327
10.4.3 其他Perl选项 327
10.5 Ferret(Ruby) 328
10.6 PHP 329
10.6.1 Zend Framework 329
10.6.2 PHP Bridge 330
10.7 PyLucene(Python) 330
10.7.1 API兼容 332
10.7.2 其他Python选项 332
10.8 Solr(包含多种编程语言) 332
10.9 小结 334
第11章 Lucene管理和性能调优 335
11.1 性能调优 336
11.1.1 简单的性能调优步骤 337
11.1.2 测试方法 338
11.1.3 索引-搜索时延调优 339
11.1.4 索引操作吞吐量调优 340
11.1.5 搜索时延和搜索吞吐量调优 344
11.2 多线程和并行处理 346
11.2.1 使用多线程进行索引操作 347
11.2.2 使用多线程进行搜索操作 351
11.3 资源消耗管理 354
11.3.1 磁盘空间管理 354
11.3.2 文件描述符管理 357
11.3.3 内存管理 361
11.4 热备份索引 364
11.4.1 创建索引备份 365
11.4.2 恢复索引 366
11.5 常见错误 367
11.5.1 索引损坏 367
11.5.2 修复索引 369
11.6 小结 369
第3部分 案例分析
第12章 案例分析1:Krugle 373
12.1 Krugle介绍 374
12.2 应用架构 375
12.3 搜索性能 376
12.4 源代码解析 377
12.5 子串搜索 378
12.6 查询VS搜索 381
12.7 改进空间 382
12.7.1 FieldCache内存使用 382
12.7.2 合并索引 382
12.8 小结 383
第13章 案例分析2:SIREn 384
13.1 SIREn介绍 385
13.2 SIREn优势 385
13.2.1 通过所有域进行搜索 387
13.2.2 一种高效词典 388
13.2.3 可变域 388
13.2.4 对多值域的高效处理 388
13.3 使用SIREn索引实体 388
13.3.1 数据模型 389
13.3.2 实现问题 389
13.3.3 索引概要 390
13.3.4 索引前的数据准备 390
13.4 使用SIREn搜索实体 392
13.4.1 搜索内容 392
13.4.2 根据单元限制搜索范围 393
13.4.3 将单元合并成元组 393
13.4.4 针对实体描述进行查询 394
13.5 在Solr中集成SIREn 394
13.6 Benchmark 395
13.7 小结 397
第14章 案例分析3:LinkedIn 398
14.1 使用Bobo Browse进行分组搜索 398
14.1.1 Bobo Browse的设计 400
14.1.2 深层次分组搜索 403
14.2 使用Zoie进行实时搜索 405
14.2.1 Zoie架构 406
14.2.2 实时VS近实时 409
14.2.3 文档与索引请求 411
14.2.4 自定义IndexReaders 411
14.2.5 与Lucene的近实时搜索进行比较 412
14.2.6 分布式搜索 413
14.3 小结 415
附录A 安装Lucene 416
A.1 二进制文件安装 416
A.2 运行命令行演示程序 417
A.3 运行Web应用演示程序 418
A.4 编译源代码 419
A.5 排错 420
附录B Lucene索引格式 421
B.1 逻辑索引视图 421
B.2 关于索引结构 422
B.2.1 理解多文件索引结构 422
B.2.2 理解复合索引结构 425
B.2.3 转换索引结构 426
B.3 倒排索引 427
B.4 小结 430
附录C Lucene/contrib benchmark 431
C.1 运行测试脚本 432
C.2 测试脚本的组成部分 435
C.2.1 内容源和文档生成器 438
C.2.2 查询生成器 439
C.3 控制结构 439
C.4 内置任务 441
C.4.1 建立和使用行文件 445
C.4.2 内置报表任务 446
C.5 评估搜索质量 446
C.6 出错处理 449
C.7 小结 449
附录D 资源 450
D.1 Lucene知识库 450
D.2 国际化 450
D.3 语言探测 451
D.4 项向量 451
D.5 Lucene移植版本 451
D.6 案例分析 452
D.7 其他 452
D.8 信息检索软件 452
D.9 Doug Cutting的著作 453
D.9.1 会议论文 453
D.9.2 美国专利 454
第1章 初识Lucene 3
1.1 应对信息爆炸 4
1.2 Lucene是什么 5
1.2.1 Lucene能做些什么 6
1.2.2 Lucene的历史 7
1.3 Lucene和搜索程序组件 9
1.3.1 索引组件 10
1.3.2 搜索组件 13
1.3.3 搜索程序的其他模块 16
1.3.4 Lucene与应用程序的整合点 18
1.4 Lucene实战:程序示例 18
1.4.1 建立索引 19
1.4.2 搜索索引 22
1.5 理解索引过程的核心类 25
1.5.1 IndexWriter 25
1.5.2 Directory 25
1.5.3 Analyzer 26
1.5.4 Document 26
1.5.5 Field 27
1.6 理解搜索过程的核心类 27
1.6.1 IndexSearcher 27
1.6.2 Term 28
1.6.3 Query 28
1.6.4 TermQuery 28
1.6.5 TopDocs 29
1.7 小结 29
第2章 构建索引 30
2.1 Lucene如何对搜索内容进行建模 31
2.1.1 文档和域 31
2.1.2 灵活的架构 32
2.1.3 反向规格化(Denormalization) 32
2.2 理解索引过程 33
2.2.1 提取文本和创建文档 33
2.2.2 分析文档 34
2.2.3 向索引添加文档 34
2.3 基本索引操作 35
2.3.1 向索引添加文档 35
2.3.2 删除索引中的文档 38
2.3.3 更新索引中的文档 39
2.4 域选项 41
2.4.1 域索引选项 41
2.4.2 域存储选项 42
2.4.3 域的项向量选项 42
2.4.4 Reader、TokenStream和byte[ ]域值 42
2.4.5 域选项组合 43
2.4.6 域排序选项 44
2.4.7 多值域 44
2.5 对文档和域进行加权操作 45
2.5.1 文档加权操作 45
2.5.2 域加权操作 46
2.5.3 加权基准(Norms) 47
2.6 索引数字、日期和时间 48
2.6.1 索引数字 48
2.6.2 索引日期和时间 49
2.7 域截取(Field truncation) 50
2.8 近实时搜索(Near-real-time search) 51
2.9 优化索引 51
2.10 其他Directory子类 52
2.11 并发、线程安全及锁机制 55
2.11.1 线程安全和多虚拟机安全 55
2.11.2 通过远程文件系统访问索引 56
2.11.3 索引锁机制 57
2.12 调试索引 59
2.13 高级索引概念 60
2.13.1 用IndexReader删除文档 61
2.13.2 回收被删除文档所使用过的磁盘空间 62
2.13.3 缓冲和刷新 62
2.13.4 索引提交 63
2.13.5 ACID事务和索引连续性 65
2.13.6 合并段 66
2.14 小结 68
第3章 为应用程序添加搜索功能 70
3.1 实现简单的搜索功能 71
3.1.1 对特定项的搜索 72
3.1.2 解析用户输入的查询表达式:QueryParser 73
3.2 使用IndexSearcher类 76
3.2.1 创建IndexSearcher类 76
3.2.2 实现搜索功能 78
3.2.3 使用TopDocs类 78
3.2.4 搜索结果分页 79
3.2.5 近实时搜索 79
3.3 理解Lucene的评分机制 81
3.3.1 Lucene如何评分 81
3.3.2 使用explain()理解搜索结果评分 83
3.4 Lucene的多样化查询 84
3.4.1 通过项进行搜索:TermQuery类 85
3.4.2 在指定的项范围内搜索:TermRangeQuery类 86
3.4.3 在指定的数字范围内搜索:NumericRangeQuery类 87
3.4.4 通过字符串搜索:PrefixQuery类 88
3.4.5 组合查询:BooleanQuery类 88
3.4.6 通过短语搜索:PhraseQuery类 91
3.4.7 通配符查询:WildcardQuery类 93
3.4.8 搜索类似项:FuzzyQuery类 94
3.4.9 匹配所有文档:MatchAllDocsQuery类 95
3.5 解析查询表达式:QueryParser 96
3.5.1 Query.toString方法 97
3.5.2 TermQuery 97
3.5.3 项范围查询 98
3.5.4 数值范围搜索和日期范围搜索 99
3.5.5 前缀查询和通配符查询 99
3.5.6 布尔操作符 100
3.5.7 短语查询 100
3.5.8 模糊查询 101
3.5.9 MatchAllDocsQuery 102
3.5.10 分组查询 102
3.5.11 域选择 103
3.5.12 为子查询设置加权 103
3.5.13 是否一定要使用QueryParse 103
3.6 小结 104
第4章 Lucene的分析过程 105
4.1 使用分析器 106
4.1.1 索引过程中的分析 107
4.1.2 QueryParser分析 109
4.1.3 解析vs分析:分析器何时不再适用 109
4.2 剖析分析器 110
4.2.1 语汇单元的组成 111
4.2.2 语汇单元流揭秘 112
4.2.3 观察分析器 115
4.2.4 语汇单元过滤器:过滤顺序的重要性 119
4.3 使用内置分析器 121
4.3.1 StopAnalyzer 122
4.3.2 StandardAnalyzer 122
4.3.3 应当采用哪种核心分析器 123
4.4 近音词查询 123
4.5 同义词、别名和其他表示相同意义的词 126
4.5.1 创建SynonymAnalyzer 127
4.5.2 显示语汇单元的位置 131
4.6 词干分析 132
4.6.1 StopFilter保留空位 133
4.6.2 合并词干操作和停用词移除操作 134
4.7 域分析 134
4.7.1 多值域分析 135
4.7.2 特定域分析 135
4.7.3 搜索未被分析的域 136
4.8 语言分析 139
4.8.1 Unicode与字符编码 139
4.8.2 非英语语种分析 140
4.8.3 字符规范化处理 140
4.8.4 亚洲语种分析 141
4.8.5 有关非英语语种分析的其他问题 143
4.9 Nutch分析 144
4.10 小结 146
第5章 高级搜索技术 147
5.1 Lucene域缓存 148
5.1.1 为所有文档加载域值 149
5.1.2 段对应的reader 149
5.2 对搜索结果进行排序 150
5.2.1 根据域值进行排序 150
5.2.2 按照相关性进行排序 153
5.2.3 按照索引顺序进行排序 154
5.2.4 通过域进行排序 154
5.2.5 倒排序 155
5.2.6 通过多个域进行排序 156
5.2.7 为排序域选择类型 157
5.2.8 使用非默认的locale方式进行排序 157
5.3 使用MultiPhraseQuery 158
5.4 针对多个域的一次性查询 160
5.5 跨度查询 162
5.5.1 跨度查询的构建模块:SpanTermQuery 165
5.5.2 在域的起点查找跨度 166
5.5.3 彼此相邻的跨度 167
5.5.4 在匹配结果中排除重叠的跨度 169
5.5.5 SpanOrQuery类 170
5.5.6 SpanQuery类和QueryParser类 171
5.6 搜索过滤 172
5.6.1 TermRangeFilter 173
5.6.2 NumericRangeFilter 174
5.6.3 FieldCacheRangeFilter 174
5.6.4 特定项过滤 174
5.6.5 使用QueryWrapperFilter类 175
5.6.6 使用SpanQueryFilter类 175
5.6.7 安全过滤器 176
5.6.8 使用BooleanQuery类进行过滤 177
5.6.9 PrefixFilter 178
5.6.10 缓存过滤结果 178
5.6.11 将filter封装成query 179
5.6.12 对过滤器进行过滤 179
5.6.13 非Lucene内置的过滤器 180
5.7 使用功能查询实现自定义评分 180
5.7.1 功能查询的相关类 180
5.7.2 使用功能查询对最近修改过的文档进行加权 182
5.8 针对多索引的搜索 184
5.8.1 使用MultiSearch类 184
5.8.2 使用ParallelMultiSearcher进行多线程搜索 186
5.9 使用项向量 186
5.9.1 查找相似书籍 187
5.9.2 它属于哪个类别 190
5.9.3 TermVectorMapper类 193
5.10 使用FieldSelector加载域 194
5.11 停止较慢的搜索 195
5.12 小结 196
第6章 扩展搜索 198
6.1 使用自定义排序方法 199
6.1.1 针对地理位置排序方式进行文档索引 199
6.1.2 实现自定义的地理位置排序方式 200
6.1.3 访问自定义排序中的值 203
6.2 开发自定义的Collector 204
6.2.1 Collector基类 205
6.2.2 自定义Collector:BookLinkCollector 206
6.2.3 AllDocCollector类 207
6.3 扩展QueryParser类 208
6.3.1 自定义QueryParser的行为 208
6.3.2 禁用模糊查询和通配符查询 209
6.3.3 处理数值域的范围查询 210
6.3.4 处理日期范围 211
6.3.5 对已排序短语进行查询 213
6.4 自定义过滤器 215
6.4.1 实现自定义过滤器 215
6.4.2 搜索期间使用自定义过滤器 216
6.4.3 另一种选择:FilterQuery类 217
6.5 有效载荷(Payloads) 218
6.5.1 分析期间生成有效载荷 219
6.5.2 搜索期间使用有效载荷 220
6.5.3 有效载荷和跨度查询 223
6.5.4 通过TermPositions来检索有效载荷 223
6.6 小结 223
第2部分 Lucene应用
第7章 使用Tika提取文本 227
7.1 Tika是什么 228
7.2 Tika的逻辑设计和API 230
7.3 安装Tika 231
7.4 Tika的内置文本提取工具 232
7.5 编程实现文本提取 234
7.5.1 索引Lucene文档 234
7.5.2 Tika工具类 237
7.5.3 选择自定义分析器 238
7.6 Tika的局限 238
7.7 索引自定义的XML文件 239
7.7.1 使用SAX进行解析 239
7.7.2 使用Apache Commons Digester进行解析和索引 242
7.8 其他选择 244
7.9 小结 245
第8章 Lucene基本扩展 246
8.1 Luke:Lucene的索引工具箱 247
8.1.1 Overview标签页:索引的全局视图 248
8.1.2 浏览文档 249
8.1.3 使用QueryParser进行搜索 251
8.1.4 Files and Plugins标签页 252
8.2 分析器、语汇单元器和语汇单元过滤器 253
8.2.1 SnowballAnalyzer 255
8.2.2 Ngram过滤器 256
8.2.3 Shingle过滤器 258
8.2.4 获取捐赠分析器 258
8.3 高亮显示查询项 259
8.3.1 高亮显示模块 259
8.3.2 独立的高亮显示示例 262
8.3.3 使用CSS进行高亮显示处理 263
8.3.4 高亮显示搜索结果 264
8.4 FastVector Highlighter类 266
8.5 拼写检查 269
8.5.1 生成提示列表 269
8.5.2 选择最佳提示 271
8.5.3 向用户展示搜索结果 272
8.5.4 一些加强拼写检查的考虑 273
8.6 引人注目的查询扩展功能 274
8.6.1 MoreLikeThis 274
8.6.2 FuzzyLikeThisQuery 275
8.6.3 BoostingQuery 275
8.6.4 TermsFilter 276
8.6.5 DuplicateFilter 276
8.6.6 RegexQuery 276
8.7 构建软件捐赠模块(contrib module) 277
8.7.1 源代码获取方式 277
8.7.2 contrib目录的Ant插件 277
8.8 小结 278
第9章 Lucene高级扩展 279
9.1 链式过滤器 280
9.2 使用Berkeley DB存储索引 282
9.3 WordNet同义词 284
9.3.1 建立同义词索引 285
9.3.2 将WordNet同义词链接到分析器中 287
9.4 基于内存的快速索引 289
9.5 XML QueryParser:超出“one box”的搜索接口 289
9.5.1 使用XmlQueryParser 291
9.5.2 扩展XML查询语法 295
9.6 外围查询语言 296
9.7 Spatial Lucene 298
9.7.1 索引空间数据 299
9.7.2 搜索空间数据 302
9.7.3 Spatial Lucene的性能特点 304
9.8 远程进行多索引搜索 306
9.9 灵活的QueryParser 309
9.10 其他内容 312
9.11 小结 313
第10章 其他编程语言使用Lucene 314
10.1 移植入门 315
10.1.1 移植取舍 316
10.1.2 选择合适的移植版本 317
10.2 CLucene(C++) 317
10.2.1 移植目的 318
10.2.2 API和索引兼容 319
10.2.3 支持的平台 321
10.2.4 当前情况以及未来展望 321
10.3 Lucene.Net(C#和其他.NET编程语言) 321
10.3.1 API兼容 323
10.3.2 索引兼容 324
10.4 KinoSearch和Lucy(Perl) 324
10.4.1 KinoSearch 325
10.4.2 Lucy 327
10.4.3 其他Perl选项 327
10.5 Ferret(Ruby) 328
10.6 PHP 329
10.6.1 Zend Framework 329
10.6.2 PHP Bridge 330
10.7 PyLucene(Python) 330
10.7.1 API兼容 332
10.7.2 其他Python选项 332
10.8 Solr(包含多种编程语言) 332
10.9 小结 334
第11章 Lucene管理和性能调优 335
11.1 性能调优 336
11.1.1 简单的性能调优步骤 337
11.1.2 测试方法 338
11.1.3 索引-搜索时延调优 339
11.1.4 索引操作吞吐量调优 340
11.1.5 搜索时延和搜索吞吐量调优 344
11.2 多线程和并行处理 346
11.2.1 使用多线程进行索引操作 347
11.2.2 使用多线程进行搜索操作 351
11.3 资源消耗管理 354
11.3.1 磁盘空间管理 354
11.3.2 文件描述符管理 357
11.3.3 内存管理 361
11.4 热备份索引 364
11.4.1 创建索引备份 365
11.4.2 恢复索引 366
11.5 常见错误 367
11.5.1 索引损坏 367
11.5.2 修复索引 369
11.6 小结 369
第3部分 案例分析
第12章 案例分析1:Krugle 373
12.1 Krugle介绍 374
12.2 应用架构 375
12.3 搜索性能 376
12.4 源代码解析 377
12.5 子串搜索 378
12.6 查询VS搜索 381
12.7 改进空间 382
12.7.1 FieldCache内存使用 382
12.7.2 合并索引 382
12.8 小结 383
第13章 案例分析2:SIREn 384
13.1 SIREn介绍 385
13.2 SIREn优势 385
13.2.1 通过所有域进行搜索 387
13.2.2 一种高效词典 388
13.2.3 可变域 388
13.2.4 对多值域的高效处理 388
13.3 使用SIREn索引实体 388
13.3.1 数据模型 389
13.3.2 实现问题 389
13.3.3 索引概要 390
13.3.4 索引前的数据准备 390
13.4 使用SIREn搜索实体 392
13.4.1 搜索内容 392
13.4.2 根据单元限制搜索范围 393
13.4.3 将单元合并成元组 393
13.4.4 针对实体描述进行查询 394
13.5 在Solr中集成SIREn 394
13.6 Benchmark 395
13.7 小结 397
第14章 案例分析3:LinkedIn 398
14.1 使用Bobo Browse进行分组搜索 398
14.1.1 Bobo Browse的设计 400
14.1.2 深层次分组搜索 403
14.2 使用Zoie进行实时搜索 405
14.2.1 Zoie架构 406
14.2.2 实时VS近实时 409
14.2.3 文档与索引请求 411
14.2.4 自定义IndexReaders 411
14.2.5 与Lucene的近实时搜索进行比较 412
14.2.6 分布式搜索 413
14.3 小结 415
附录A 安装Lucene 416
A.1 二进制文件安装 416
A.2 运行命令行演示程序 417
A.3 运行Web应用演示程序 418
A.4 编译源代码 419
A.5 排错 420
附录B Lucene索引格式 421
B.1 逻辑索引视图 421
B.2 关于索引结构 422
B.2.1 理解多文件索引结构 422
B.2.2 理解复合索引结构 425
B.2.3 转换索引结构 426
B.3 倒排索引 427
B.4 小结 430
附录C Lucene/contrib benchmark 431
C.1 运行测试脚本 432
C.2 测试脚本的组成部分 435
C.2.1 内容源和文档生成器 438
C.2.2 查询生成器 439
C.3 控制结构 439
C.4 内置任务 441
C.4.1 建立和使用行文件 445
C.4.2 内置报表任务 446
C.5 评估搜索质量 446
C.6 出错处理 449
C.7 小结 449
附录D 资源 450
D.1 Lucene知识库 450
D.2 国际化 450
D.3 语言探测 451
D.4 项向量 451
D.5 Lucene移植版本 451
D.6 案例分析 452
D.7 其他 452
D.8 信息检索软件 452
D.9 Doug Cutting的著作 453
D.9.1 会议论文 453
D.9.2 美国专利 454