第1部分 初識Solr 1
1 Solr 入門 2
1.1 為什麼需要搜索引擎 3
1.1.1 管理以文本為中心的數據 3
1.1.2 常見的搜索引擎用例 6
1.2 Solr 是什麼 8
1.2.1 信息檢索引擎 9
1.2.2 靈活的模式管理 11
1.2.3 Java Web 應用 12
1.2.4 一颱服務器上的多個索引 13
1.2.5 可擴展性(插件) 13
1.2.6 可伸縮性 14
1.2.7 容錯性 15
1.3 選擇Solr 的理由 15
1.3.1 麵嚮軟件架構師的Solr 15
1.3.2 麵嚮係統管理員的Solr 16
1.3.3 麵嚮CEO 的Solr 17
1.4 功能概述 17
1.4.1 用戶體驗功能 17
1.4.2 數據建模功能 19
1.4.3 Solr 4 的新功能 20
1.5 本章小結 22
2 Solr 上手 23
2.1 開始上手 24
2.1.1 Solr 的安裝 24
2.1.2 啓動Solr 的示例服務器 25
2.1.3 瞭解Solr 主目錄 29
2.1.4 對示例文檔進行索引 30
2.2 一切都關乎搜索 31
2.2.1 Solr 查詢錶單詳解 31
2.2.2 Solr 的搜索返迴機製 34
2.2.3 排名檢索 36
2.2.4 分頁和排序 36
2.2.5 擴展的搜索功能 38
2.3 Solr 管理控製颱一覽 40
2.4 根據需求改造搜索示例服務器 42
2.5 本章小結 43
3 Solr 基礎理論 45
3.1 搜索、匹配與找尋內容 46
3.1.1 何為文檔 46
3.1.2 基本搜索問題 47
3.1.3 倒排索引 50
3.1.4 詞項、短語與布爾邏輯 51
3.1.5 找到文檔集 53
3.1.6 短語查詢與術語位置 55
3.1.7 模糊匹配 57
3.1.8 快速小結 61
3.2 相關度 61
3.2.1 默認相似度 62
3.2.2 詞項頻次 63
3.2.3 反嚮文檔頻次 64
3.2.4 詞項權重 65
3.2.5 規範化因子 66
3.3 查準率與查全率 67
3.3.1 查準率 67
3.3.2 查全率 68
3.3.3 達到平衡 69
3.4 搜索的規模化 70
3.4.1 非規範化文檔 70
3.4.2 分布式搜索 72
3.4.3 集群vs. 服務器 73
3.4.4 Solr 的局限 74
3.5 本章小結 75
4 配置Solr 77
4.1 solrconfig.xml 文件概覽 80
4.1.1 常見的XML 數據結構和數據類型元素 82
4.1.2 配置文件更新的應用 82
4.1.3 Solr 的其他配置 83
4.2 查詢請求處理 85
4.2.1 請求處理簡介 86
4.2.2 搜索處理器 88
4.2.3 Solritas 的browse 請求處理器示例 90
4.2.4 利用搜索組件擴展查詢處理 94
4.3 管理搜索器 98
4.3.1 新建搜索器 99
4.3.2 新搜索器預熱 100
4.4 緩存管理 103
4.4.1 緩存原理 103
4.4.2 過濾器緩存 105
4.4.3 查詢結果緩存 108
4.4.4 文檔緩存 110
4.4.5 字段值緩存 110
4.5 其他配置選項 110
4.6 本章小結 111
5 創建索引 112
5.1 微博搜索應用示例 113
5.1.1 麵嚮搜索的內容錶示 113
5.1.2 Solr 索引構建概覽 115
5.2 設計自己的schema 117
5.2.1 文檔粒度 117
5.2.3 索引字段 119
5.2.4 存儲字段 119
5.2.5 schema.xml 概覽 120
5.3 在schema.xml 中定義字段 121
5.3.1 必備字段屬性 122
5.3.2 多值字段 123
5.3.3 動態字段 124
5.3.4 復製字段 127
5.3.5 唯一鍵字段 129
5.4 結構化非文本字段類型 129
5.4.1 字符串字段 130
5.4.2 日期字段 131
5.4.3 數值字段 133
5.4.4 高級字段類型屬性 134
5.5 發送文檔到Solr 進行索引 137
5.5.1 使用XML 或JSON 進行文檔索引 137
5.5.2 使用SolrJ 客戶端庫添加文檔索引 140
5.5.3 嚮Solr 導入文檔的其他工具 142
5.6 更新處理器 143
5.6.1 將文檔提交到索引 145
5.6.2 事務日誌 146
5.6.3 原子更新 148
5.7 索引管理 151
5.7.1 索引存儲 151
5.7.2 索引片段閤並 154
5.8 本章小結 156
6 文本分析 157
6.1 微博文本分析 158
6.2 基礎文本分析 161
6.2.1 分析器 163
6.2.2 分詞器 163
6.2.3 分詞過濾器 164
6.2.4 StandardTokenizer 164
6.2.5 使用StopFilterFactory 移除停用詞 165
6.2.6 使用LowerCaseFilterFactory 對詞項進行小寫轉換 166
6.2.7 通過Solr 分析錶單進行文本分析測試 167
6.3 為微博文本自定義一個字段類型 169
6.3.1 使用PatternReplaceCharFilterFactory 摺疊重復的字母 172
6.3.2 保留主題標簽、提及符號和連字符詞項 173
6.3.3 使用ASCIIFoldingFilterFactory 移除變音符號 177
6.3.4 使用KStemFilterFactory 提取詞乾 177
6.3.5 在查詢階段使用SynonymFilterFactory 加入同義詞 178
6.3.6 把過濾器組閤在一起 179
6.4 高級文本分析 182
6.4.1 高級字段屬性 182
6.4.2 各語種文本分析 183
6.4.3 使用Solr 插件擴展文本分析 185
6.5 本章小結 188
第2部分 Solr 的核心功能 191
7 執行查詢和處理搜索結果 192
7.1 Solr 請求詳解 193
7.1.1 請求處理器 193
7.1.2 搜索組件 197
7.1.3 查詢解析器 200
7.2 查詢解析器的使用 201
7.2.1 指定查詢解析器 201
7.2.2 局部參數 201
7.3 查詢和過濾器 204
7.3.1 fq 和q 參數 204
7.3.2 處理代價過高的過濾器 207
7.4 默認查詢分析器(Lucene 查詢解析器) 209
7.4.1 Lucene 查詢解析器語法 209
7.5 處理用戶查詢(eDisMax 查詢解析器) 215
7.5.1 eDisMax 查詢解析器概述 216
7.5.2 eDisMax 查詢參數 216
7.5.3 搜索多個字段 216
7.5.4 查詢與短語的權重調整 217
7.5.5 字段彆名 219
7.5.6 可訪問字段 221
7.5.7 最小匹配 221
7.5.8 eDisMax 的優缺點 223
7.6 其他有用的查詢解析器 225
7.6.1 字段查詢解析器 225
7.6.2 詞項查詢解析器和原始查詢解析器 225
7.6.3 函數查詢解析器和函數區間查詢解析器 226
7.6.4 嵌套查詢和嵌套查詢解析器 226
7.6.5 調整權重查詢解析器 227
7.6.6 前綴查詢解析器 228
7.6.7 空間查詢解析器 228
7.6.8 連接查詢解析器 228
7.6.9 分支查詢解析器 229
7.6.10 外圍查詢解析器 229
7.6.11 最大得分查詢解析器 230
7.6.12 摺疊查詢解析器 230
7.7 返迴搜索結果 231
7.7.1 選擇響應格式 231
7.7.2 選擇返迴字段 233
7.7.3 搜索結果分頁 235
7.8 搜索結果排序 237
7.8.1 按字段排序 238
7.8.2 按函數排序 239
7.8.3 模糊排序 239
7.9 調試查詢結果 240
7.9.1 返迴調試信息 240
7.10 本章小結 241
8 分麵搜索 242
8.1 搜索結果概覽 243
8.2 建立測試數據 246
8.3 字段分麵 250
8.4 查詢分麵 255
8.5 區間分麵 257
8.6 基於分麵值的過濾 260
8.6.1 在分麵上使用過濾器 260
8.6.2 基於分麵值的安全過濾方法 264
8.7 多選分麵、鍵與標記 266
8.7.1 鍵 266
8.7.2 標記、排除和多選分麵 268
8.8 超越分麵基礎 271
8.9 本章小結 271
9 搜索結果高亮 272
9.1 高亮簡介 273
9.2 高亮工作原理 274
9.2.1 為UFO 目擊數據創建新的Solr 內核 275
9.2.2 索引構建前預處理UFO 目擊數據集 275
9.2.3 探索UFO 目擊數據集 278
9.2.4 開箱即用的高亮 278
9.2.5 高亮具體細節 281
9.2.6 改善高亮顯示結果 287
9.3 使用FastVectorHighlighter 組件提升性能 292
9.4 PostingsHighlighter 組件 293
9.5 本章小結 296
10 查詢建議 297
10.1 拼寫檢查 298
10.1.1 索引維基百科的文章 298
10.1.2 拼寫檢查舉例 300
10.1.3 拼寫檢查搜索組件 303
10.2 自動建議查詢詞 309
10.2.1 自動建議請求處理器 309
10.2.2 自動建議搜索組件 311
10.3 文檔字段值建議 312
10.3.1 使用n-grams 生成建議 312
10.3.2 n-gram-driven 請求處理器 314
10.4 基於用戶活動提供查詢建議 315
10.5 本章小結 320
11 結果分組/ 字段摺疊 321
11.1 結果分組 vs. 字段摺疊 322
11.2 忽略重復文檔 322
11.3 搜索結果中每組返迴多個文檔 330
11.4 按照函數和查詢對結果分組 334
11.4.1 按照函數進行分組 334
11.4.2 按照查詢進行分組 336
11.5 對分組結果進行分頁和排序 337
11.6 分組陷阱 340
11.6.1 根據結果分組進行分麵操作 340
11.6.2 分布式結果分組 342
11.6.3 返迴扁平化列錶 343
11.6.4 按多值和分詞字段進行分組 343
11.6.5 分組性能 344
11.7 使用摺疊查詢解析器進行高效的字段摺疊 344
11.8 本章小結 346
12 搭建Solr 生産環境 347
12.1 編寫一份Solr 的分發版 347
12.2 部署Solr 348
12.2.1 編譯自定義的Solr 分發版 348
12.2.2 在應用程序中內嵌Solr 349
12.3 硬件和服務器配置 350
12.3.1 內存和固態硬盤 350
12.3.2 JVM 設置 351
12.3.3 索引切換 352
12.3.4 實用Solr 係統配置技巧 355
12.4 數據獲取策略 357
12.5 分片和復製 361
12.5.1 分片策略 361
12.5.2 復製策略 364
12.6 Solr 內核管理 368
12.7 管理服務器集群 374
12.7.1 負載均衡器和Solr 健康檢查 374
12.7.2 通用配置 vs. 自定義配置 375
12.8 Solr 的查詢與交互 378
12.8.1 REST API 378
12.8.2 可用的Solr 客戶端庫 378
12.8.3 使用SolrJ 379
12.9 監控Solr 的性能 383
12.9.1 Solr 的插件/ 統計頁 383
12.9.2 Solr 緩存性能 387
12.9.3 從請求處理器和MBeans 獲取統計信息 388
12.9.4 外部監控選項 389
12.9.5 Solr 日誌 390
12.9.6 加載測試 390
12.10 不同Solr 版本之間的升級 391
12.11 本章小結 392
第3部分 Solr 進階 393
13 SolrCloud 394
13.1 SolrCloud 上手 395
13.1.1 在雲模式下啓動Solr 395
13.1.2 SolrCloud 架構的驅動因素 400
13.2 核心概念 405
13.2.1 集閤 vs. 內核 405
13.2.2 ZooKeeper 406
13.2.3 確定分片和副本的數量 410
13.2.4 集群狀態管理 411
13.2.5 確定分片代錶 412
13.2.6 SolrCloud 的重要配置 413
13.3 分布式索引 416
13.3.1 將文檔分配給分片 417
13.3.2 添加文檔 418
13.3.3 近實時搜索 421
13.3.4 節點恢復過程 422
13.4 分布式搜索 423
13.4.1 多階段查詢流程 423
13.4.2 分布式搜索的局限性 425
13.5 集閤API 425
13.5.1 創建集閤 426
13.5.2 集閤彆名 429
13.6 基本係統管理任務 431
13.6.1 配置更新 432
13.6.2 滾動重啓 432
13.6.3 重啓故障節點 433
13.6.4 節點X 處於活躍狀態嗎 433
13.6.5 新增副本 434
13.6.6 異地備份 434
13.7 高級主題 435
13.7.1 自定義散列 435
13.7.2 分片分割 436
13.8 本章小結 438
14 多語種搜索 439
14.1 為什麼語種分析很重要 440
14.2 詞乾提取vs. 詞形還原 441
14.3 詞乾提取實戰 442
14.4 處理邊界情況 447
14.4.1 KeywordMarkerFilterFactory 448
14.4.2 StemmerOverrideFilterFactory 448
14.5 Solr 支持的語種庫 449
14.5.1 特定語種的分析器 449
14.5.2 基於詞典的詞乾提取(Hunspell) 452
14.6 在多語種中搜索內容 453
14.6.1 每種語言一個獨立字段 453
14.6.2 每個語種構建單獨的索引 459
14.6.3 支持多語種的單個字段 462
14.6.4 創建一個字段類型來處理支持多語種的單個字段 463
14.7 語種識彆 475
14.7.1 語種識彆更新處理器 475
14.7.2 在一個字段中動態分配語種檢測分析器 482
14.8 本章小結 488
15 復雜查詢操作 489
15.1 函數查詢 490
15.1.1 函數語法 490
15.1.2 函數的搜索 492
15.1.3 以字段形式返迴函數 494
15.1.4 函數排序 495
15.1.5 Solr 的可用函數集 496
15.1.6 自定義函數 502
15.2 地理空間搜索 507
15.2.1 搜索附近的一個點 507
15.2.2 高級地理空間搜索 513
15.3 分麵透視 523
15.4 引用外部數據 526
15.5 跨文檔和跨索引的連接 528
15.6 使用Solr 做大數據分析 531
15.7 本章小結 532
16 精通相關度 533
16.1 相關度調整的影響 534
16.2 相關度計算的調試 535
16.3 提升相關度 541
16.3.1 字段提升 541
16.3.2 詞項提升 543
16.3.3 負載提升 544
16.3.4 函數提升 545
16.3.5 詞項鄰近度提升 547
16.3.6 提升重要文檔的相關度 549
16.4 可插拔的相似度的類實現 552
16.5 個性化搜索與推薦 553
16.5.1 搜索vs. 推薦 554
16.5.2 基於屬性的匹配 554
16.5.3 分層匹配 556
16.5.4 更多類似結果 558
16.5.5 基於概念的匹配 563
16.5.6 地理位置的匹配 568
16.5.7 協同過濾 569
16.5.8 混閤方式 573
16.6 塑造個性化搜索體驗 574
16.7 開展相關度實驗 574
16.8 本章小結 577
附錄A 與Solr 代碼庫打交道 578
附錄B 語種字段類型配置 587
附錄C 有用的數據導入配置 593
· · · · · · (
收起)