第1部分 Lucene的核心 2
第1章 初识Lucene 2
推荐序 3
1.1 信息组织和访问的发展历程 3
译者序 5
1.2 理解Lucene 5
1.2.1 Lucene是什么 5
1.2.2 Lucene能做些什么 6
1.2.3 Lucene的历史 7
1.2.5 Lucene移植:Perl、Python、C++、.NET及Ruby版本 8
1.3 索引和搜索 8
1.2.4 使用Lucene的组织 8
1.3.2 什么是搜索 9
1.3.1 什么是索引,为什么如此重要? 9
1.4 Lucene实践:一个应用实例 9
1.4.1 创建一个索引 10
前言1 13
1.4.2 搜索一个索引 13
前言2 15
1.5 理解索引过程的核心类 16
1.5.1 IndexWriter 16
1.5.2 Directory 17
1.5.3 Analyzer 17
致谢 18
1.5.4 Document 18
1.5.5 Field 18
1.6 理解搜索过程的核心类 20
1.6.1 IndexSearcher 20
1.6.2 Term 20
1.6.5 Hits 21
1.7 可选择的同类产品 21
关于此书 21
1.6.4 TermQuery 21
1.6.3 Query 21
1.7.1 信息检索工具库 22
1.7.2 索引与搜索应用程序 23
1.7.3 在线资源 24
1.8 小结 24
第2章 索引 26
2.1 理解索引过程 27
2.1.1 转换成文本 28
2.1.2 分析 28
2.1.3 将分析过后的数据写入索引 29
2.2 基本索引操作 29
2.2.1 向索引添加文档 29
2.2.2 删除索引中的文档 31
2.2.3 恢复被删除的文档 33
2.2.4 更新索引中的文档 34
2.3 增强Document和Field对象 35
2.4 索引日期 37
2.5 索引数字 38
2.6 索引Field对象用于排序 39
2.7 控制索引过程 39
2.7.1 调整索引性能 39
2.7.2 内存中的索引:RAMDirectory 45
2.7.3 限制域的大小:maxFieldLength 50
2.8 优化索引 51
2.9 并发性、线程安全性以及锁机制 54
2.9.1 并发访问的规则 55
2.9.2 线程安全性 55
2.9.3 索引锁机制 57
2.9.4 禁用索引锁 61
2.10 调试索引过程 61
2.11 小结 62
第3章 为应用程序添加搜索功能 63
3.1 实现一个简单的搜索程序 64
3.1.1 对特定项(specific term)的搜索 65
3.1.2 解析用户输入的查询表达式:QueryParser 66
3.2 使用IndexSearcher 69
3.2.1 使用Hits 70
3.2.2 通过Hits分页显示搜索结果 71
3.2.3 将索引读入内存 72
3.3 理解Lucene的评分机制 72
3.3.1 关于Lucene,还有更多的解释 74
3.4 在程序代码中创建Query对象 75
3.4.1 通过项进行搜索:TermQuery 76
3.4.2 在指定范围内搜索:RangeQuery 77
3.4.3 通过字符串进行搜索:PrefixQuery 78
3.4.4 组合查询:BooleanQuery 79
3.4.5 通过短语搜索:PhraseQuery 81
3.4.6 使用通配符搜索:WildcardQuery 84
3.4.7 搜索类似项:FuzzyQuery 85
3.5 解析查询表达式:QueryParser 87
3.5.1 Query类的toString()方法 87
3.5.2 布尔操作符 88
3.5.5 在指定范围搜索 89
3.5.4 域的选择 89
3.5.3 查询组合 89
3.5.6 短语查询 91
3.5.7 通配符和前缀查询 92
3.5.8 模糊查询 93
3.5.9 对查询进行加权操作 93
3.5.10 需不需要使用QueryParse? 93
3.6 小结 94
第4章 分析 95
4.1 使用分析器 97
4.1.1 索引过程中的分析 98
4.1.2 QueryParser分析 99
4.1.3 解析vs分析:分析器何时不适用 100
4.2 剖析分析器 100
4.2.1 语汇单元的组成 101
4.2.2 TokenStream揭密 102
4.2.3 观察分析器 104
4.2.4 过滤顺序的重要性 108
4.3 使用内置的分析器 111
4.3.1 StopAnalyzer 111
4.3.2 StandardAnalyzer 112
4.4 处理关键词域 113
4.4.1 更换关键字分析器 116
4.5 近音词查询 117
4.6 同义词、别名以及其他表示相同意义的词 120
4.6.1 显示语汇单元的位置 126
4.7 词干分析 127
4.7.1 保留空位 128
4.7.2 PositionalPorterStopAnalyzer 129
4.7.3 为保留停用词空位所带来的问题 129
4.8 语言分析 131
4.8.1 Unicode及字符编码 132
4.8.2 非英语语种分析 132
4.8.3 亚洲语种分析 133
4.8.4 非英语语种分析引起的其他一些问题 136
4.9 Nutch分析 136
4.10 小结 138
第5章 高级搜索技术 139
5.1 对搜索结果进行排序 140
5.1.1 使用排序方法 140
5.1.2 通过相关性进行排序 142
5.1.3 按照索引顺序排序 143
5.1.4 通过某个域进行排序 144
5.1.5 以相反顺序排序 145
5.1.6 根据多个域进行排序 145
5.1.7 为排序域选择一个类型 147
5.1.8 使用非默认的locale方式排序 147
5.1.9 排序对性能的影响 147
5.2 使用PhrasePrefixQuery 148
5.3 一次实现在多个域上的查询 150
5.4 跨度查询:Lucene新的隐藏法宝 152
5.4.1 跨度查询的构件模块——SpanTermQuery 154
5.4.2 在一个域的起点查找跨度 156
5.4.3 彼此相邻的跨度 156
5.4.4 在匹配结果中排除相互交迭的跨度 158
5.4.5 全局跨度查询 159
5.4.6 SpanQuery类和QueryParser类 161
5.5 搜索过滤 161
5.5.1 DateFilter的使用 162
5.5.2 使用Queryfilter 164
5.5.3 安全过滤器 165
5.5.4 QueryFilter的过滤器的替代方案 166
5.5.5 缓存过滤器的结果 167
5.5.6 更多非内置的的过滤器 168
5.6 对多个索引的搜索 168
5.6.1 使用MultiSearcher 168
5.6.2 使用ParallelMultiSearcher进行多线程搜索 170
5.7 使用项向量 175
5.7.1 查找相似书籍 176
5.7.2 它属于哪个类别? 180
5.8 小结 183
第6章 扩展搜索 184
6.1 使用自定义的排序方法 185
6.1.1 访问用于自定义排序的值 190
6.2 编写自定义的HitCollector 191
6.2.1 关于BookLinkCollector 192
6.2.2 使用BookLinkCollector 192
6.3 扩展QueryParser 193
6.3.1 自定义QueryParser的行为 193
6.3.2 禁用模糊查询和通配符查询 194
6.3.3 对数值域的范围查询的处理 195
6.3.4 对已排序短语进行查询 198
6.4 使用自定义过滤器 199
6.4.1 使用过滤后的查询 202
6.5 性能测试 203
6.5.1 对搜索速度进行测试 204
6.5.2 负载测试 207
6.5.3 再议QueryParser! 209
6.6 小结 210
6.5.4 性能测试的本意 210
第2部分 Lucene的应用 212
第7章 对常用格式的文档进行解析 212
7.1 对富文本文档进行处理 213
7.1.1 建立一个通用的DocumentHandler接口 214
7.2 索引XML文档 215
7.2.1 用SAX API进行解析并索引 216
7.2.2 使用Digester来分析和索引 219
7.3.1 使用PDFBox提取文本和索引 224
7.3 索引PDF文档 224
7.3.2 PDFBox内置的支持Lucene特性 228
7.4 索引HTML文档 230
7.4.1 获取HTML源数据 230
7.4.2 使用JTidy 231
7.4.3 使用NekoHTML 234
7.5 索引Microsoft Word文档 237
7.5.1 使用POI 237
7.5.2 使用TextMining.org包的API 238
7.6 索引RTF文档 240
7.7 索引纯文本文档 241
7.8 创建文档处理框架 242
7.8.1 FileHandler接口 244
7.8.2 ExtensionFileHandler类 244
7.8.3 应用程序FileIndexer 247
7.8.4 FileIndexer的使用 250
7.8.5 FileIndexer的缺陷,以及如何扩展这个框架 250
7.9 其他文本提取工具 251
7.9.1 文档管理系统及相关服务 252
7.10 小结 253
第8章 Lucene的相关工具及其扩展 254
8.1 Lucene的Sandbox工具包的使用 255
8.2 与索引的交互 256
8.2.1 lucli:一个命令行接口程序 256
8.2.2 Luke:Lucene索引的工具箱 258
8.2.3 LIMO:Lucene索引监视器 265
8.3 Analyzers、tokenizers和TokenFilters 268
8.3.1 SnowballAnalyzer 269
8.4.1 使用〈index〉task 270
8.4 使用Ant和Lucene进行Java开发 270
8.3.2 如何获得Sandbox分析器 270
8.4.2 创建自定义的文档处理器 272
8.4.3 安装 275
8.5 JavaScirpt浏览器工具 276
8.5.1 JavaScript查询的构造与验证 276
8.5.2 特殊字符的转义操作 277
8.5.3 使用JavaScript支持 277
8.6 WordNet中的同义词 278
8.6.1 构建同义词索引 279
8.6.2 将WordNet中的同义词连接到分析器中 281
8.6.3 手机上的Lucene 282
8.7 高亮显示查询项 284
8.7.1 用CSS进行高亮显示 286
8.7.2 高亮显示命中结果集 288
8.8 链式过滤器 289
8.9 在Berkeley DB中存储索引 292
8.9.1 将索引存入DbDirectory 292
8.9.2 安装DbDirectory 293
8.10.1 Check out 294
8.10.2 Sandbox中的Ant 294
8.10 构建Sandbox 294
8.11 小结 295
第9章 Lucene的移植 296
9.1 移植版本与Lucene的关系 297
9.2 CLucene 298
9.2.1 支持的平台 298
9.2.2 API的兼容性 299
9.2.3 对Unicode编码的支持 300
9.3 dotLucene 301
9.2.4 性能 301
9.2.5 用户群 301
9.3.1 API的兼容性 302
9.3.2 索引的兼容性 302
9.3.3 性能 302
9.3.4 用户群 302
9.4 Plucene 303
9.4.1 API的兼容性 303
9.4.3 性能 304
9.4.4 用户 304
9.4.2 索引的兼容性 304
9.5 Lupy 305
9.5.1 API的兼容性 305
9.5.2 索引的兼容性 306
9.5.3 性能 306
9.5.4 用户群 307
9.6 PyLucene 307
9.6.1 API的兼容性 307
9.6.4 用户群 308
9.7 小结 308
9.6.3 性能 308
9.6.2 索引的兼容性 308
第10章 案例分析 309
10.1 Nutch:“搜索引擎的NPR” 310
10.1.1 深入探索Nutch 311
10.1.2 Nutch的其他一些特性 312
10.2 在jGuru上使用Lucene 313
10.2.1 主题的专有名词和文档分类 314
10.2.2 搜索数据库的结构 315
10.2.3 索引域 316
10.2.4 索引操作和预处理内容 317
10.2.5 查询 319
10.2.6 JGuruMultiSearcher 322
10.2.7 其他一些内容 324
10.3 在SearchBlox中使用Lucene 324
10.3.1 为什么选择Lucene 324
10.3.2 SearchBlox的体系结构 325
10.3.3 搜索结果 326
10.3.4 语言支持 326
10.4 Xtra Mind公司使用Lucene开发的XM-InformationMinderTM 327
10.3.6 概要 327
10.3.5 报表引擎 327
10.4.1 系统架构 330
10.4.2 Lucene是如何帮助我们完成系统的 332
10.5 Alias-i:Lucene中的拼写变体 333
10.5.1 Alias-i应用程序体系架构 334
10.5.2 拼写变种 336
10.5.3 拼写修正的噪声信道模型 337
10.5.4 拼写变体的向量比较模型 338
10.5.5 一个subword(子串)Lucene分析器 339
10.5.8 参考文献 342
10.5.6 精确度、效率及其他应用 342
10.5.7 语境中的混用 342
10.6 Michaels.com上设计精巧的搜索功能 343
10.6.1 对网站内容进行索引 344
10.6.2 对内容进行搜索 349
10.6.3 搜索统计数据 352
10.6.4 小结 352
10.7 我喜欢Lucene:TheServerSide 352
10.7.1 建立更好的搜索功能 352
10.7.2 高层基础架构 354
10.7.3 建立索引 355
10.7.4 对索引进行搜索 359
10.7.5 配置:中央控制中心 361
10.7.6 Web层:TheSeeeeeeeeeeeerverSide? 364
10.7.7 小结 366
10.8 结论 367
附录A 安装Lucene 368
附录B Lucene索引文件格式 374
附录C 资源 388