《Lucene實戰》是Michael McCandless , Erik Hatcher , Otis Gospodnetic所撰寫的一部關於Lucene的圖書,由 肖宇、牛長流翻譯,經人民郵電出版社出版。
基本介紹
內容介紹,圖書目錄,
內容介紹
《Lucene實戰(第2版)》基於Apache的Lucene 3.0,從Lucene核心、Lucene套用、案例分析3個方面詳細系統地介紹了Lucene,包括認識Lucene、建立索引、為應用程式添加搜尋功能、高級搜尋技術、擴展搜尋、使用Tika提取文本、Lucene的高級擴展、使用其他程式語言訪問Lucene、Lucene管理和性能調優等內容,最後還提供了三大經典成功案例,為讀者展示了一個奇妙的搜尋世界。
《Lucene實戰(第2版)》適合於已具有一定Java編程基本的讀者,以及希望能夠把強大的搜尋功能添加到自己的應用程式中的開發人員。《Lucene實戰(第2版)》對於從事搜尋引擎工作的工程技術人員,以及在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