資深軟件開(kāi)發(fā)專(zhuān)家、架構師撰寫(xiě),系統且深入闡釋ElasticSearch涉及的工具、方法、原則和實(shí)踐
深入剖析ElasticSearch應用過(guò)程中遇到的各個(gè)層面的問(wèn)題,涉及分布式索引機制、系統監控及性能優(yōu)化、用戶(hù)體驗改善、Java API應用,以及自定義插件開(kāi)發(fā)
資深軟件開(kāi)發(fā)專(zhuān)家、架構師撰寫(xiě),系統且深入闡釋ElasticSearch涉及的工具、方法、原則和實(shí)踐,深入剖析ElasticSearch應用過(guò)程中遇到的各個(gè)層面的問(wèn)題,涉及分布式索引機制、系統監控及性能優(yōu)化、用戶(hù)體驗改善、Java API應用,以及自定義插件開(kāi)發(fā)等,能為工程師與架構師快速提高ElasticSearch水平提供有效指導。
本書(shū)共9章,第1章介紹Apache Lucene的工作方式、ElasticSearch的基本概念以及ElasticSearch的工作機制;第2章描述Lucene評分機制、如何進(jìn)行查詢(xún)重寫(xiě),以及ElasticSearch的批處理API和如何使用過(guò)濾器來(lái)優(yōu)化查詢(xún);第3章描述如何修改Lucene評分,如何使用不同的倒排索引格式來(lái)改變索引字段的結構;第4章闡述如何選擇恰當的索引分片、路由工作機制、索引分片機制;第5章介紹如何為具體應用選擇正確的目錄實(shí)現,同時(shí)闡述發(fā)現、網(wǎng)關(guān)、恢復模塊及其配置方式,以及調優(yōu)ElasticSearch的緩存機制;第6章介紹JVM垃圾收集的工作原理、重要性以及如何調優(yōu);第7章介紹幫助修正查詢(xún)中的拼寫(xiě)錯誤以及構建高效的自動(dòng)完成機制——查詢(xún)建議,還展示如何通過(guò)使用不同查詢(xún)類(lèi)型和ElasticSearch的其他功能來(lái)提高查詢(xún)相關(guān)性;第8章重點(diǎn)闡釋ElasticSearch的JAVA API;第9章通過(guò)演示如何開(kāi)發(fā)你自己的河流和語(yǔ)言處理插件來(lái)介紹ElasticSearch的插件開(kāi)發(fā)。
Rafa· Ku,資深軟件開(kāi)發(fā)專(zhuān)家,現任Sematext集團公司咨詢(xún)專(zhuān)家及軟件工程師。他專(zhuān)注于A(yíng)pache Lucene、Solr、ElasticSearch、Hadoop stack等開(kāi)源技術(shù),擁有超過(guò)11年的軟件研發(fā)經(jīng)驗。他還是solr.pl網(wǎng)站的聯(lián)合創(chuàng )始人,該網(wǎng)站致力于幫助人們解決Solr、Lucene的相關(guān)問(wèn)題。
Marek Rogozińskis,資深軟件架構師和咨詢(xún)師,擁有超過(guò)10年的行業(yè)從業(yè)經(jīng)驗,專(zhuān)注基于開(kāi)源搜索引擎(如Solr、ElasticSearch等)的解決方案及大數據分析技術(shù)(如Hadoop、HBase、Twitter Storm等)。他是solr.pl網(wǎng)站的聯(lián)合創(chuàng )始人,除本書(shū)外,還著(zhù)有《ElasticSearch Server》。
譯者序
前言
致謝
作者簡(jiǎn)介
評審者簡(jiǎn)介
第1章 ElasticSearch簡(jiǎn)介1
1.1 Apache Lucene簡(jiǎn)介1
1.1.1 熟悉Lucene2
1.1.2 Lucene的總體架構2
1.1.3 分析你的數據3
1.1.4 Lucene查詢(xún)語(yǔ)言4
1.2 ElasticSearch簡(jiǎn)介6
1.2.1 ElasticSearch的基本概念7
1.2.2 ElasticSearch架構背后的關(guān)鍵概念8
1.2.3 ElasticSearch的工作流程9
1.3 小結13
第2章 查詢(xún)DSL進(jìn)階14
2.1 Apache Lucene默認評分公式解釋14
2.1.1 何時(shí)文檔被匹配上15
2.1.2 TF/IDF評分公式15
2.1.3 ElasticSearch如何看評分16
2.2 查詢(xún)改寫(xiě)17
2.2.1 前綴查詢(xún)范例17
2.2.2 回顧Apache Lucene19
2.2.3 查詢(xún)改寫(xiě)的屬性20
2.3 二次評分21
2.3.1 理解二次評分21
2.3.2 范例數據21
2.3.3 查詢(xún)22
2.3.4 二次評分查詢(xún)的結構22
2.3.5 二次評分參數配置23
2.3.6 小結24
2.4 批量操作24
2.4.1 批量取24
2.4.2 批量查詢(xún)26
2.5 排序27
2.5.1 基于多值字段的排序28
2.5.2 基于多值geo字段的排序28
2.5.3 基于嵌套對象的排序30
2.6 數據更新API31
2.6.1 簡(jiǎn)單字段更新31
2.6.2 使用腳本按條件更新32
2.6.3 使用更新 API創(chuàng )建或刪除文檔33
2.7 使用過(guò)濾器優(yōu)化查詢(xún)33
2.7.1 過(guò)濾器與緩存34
2.7.2 詞項查找過(guò)濾器36
2.8 ElasticSearch切面機制中的過(guò)濾器與作用域40
2.8.1 范例數據40
2.8.2 切面計算和過(guò)濾41
2.8.3 過(guò)濾器作為查詢(xún)的一部分42
2.8.4 切面過(guò)濾器44
2.8.5 全局作用域45
2.9 小結47
第3章 底層索引控制48
3.1 改變Apache Lucene的評分方式48
3.1.1 可用的相似度模型49
3.1.2 為每字段配置相似度模型49
3.2 相似度模型配置50
3.2.1 選擇默認的相似度模型51
3.2.2 配置被選用的相似度模型52
3.3 使用編解碼器53
3.3.1 簡(jiǎn)單使用范例53
3.3.2 工作原理解釋54
3.3.3 可用的倒排表格式55
3.3.4 配置編解碼器56
3.4 準實(shí)時(shí)、提交、更新及事務(wù)日志58
3.4.1 索引更新及更新提交59
3.4.2 事務(wù)日志60
3.4.3 準實(shí)時(shí)讀取62
3.5 深入理解數據處理62
3.5.1 輸入并不總是進(jìn)行文本分析62
3.5.2 范例的使用65
3.5.3 索引期更換分詞器67
3.5.4 搜索時(shí)更換分析器68
3.5.5 陷阱與默認分析68
3.6 控制索引合并68
3.6.1 選擇正確的合并策略69
3.6.2 合并策略配置70
3.6.3 調度72
3.7 小結73
第4章 分布式索引架構74
4.1 選擇合適的分片和副本數74
4.1.1 分片和過(guò)度分配75
4.1.2 一個(gè)過(guò)度分配的正面例子75
4.1.3 多分片與多索引76
4.1.4 副本76
4.2 路由76
4.2.1 分片和數據77
4.2.2 測試路由功能77
4.2.3 索引時(shí)使用路由80
4.2.4 別名83
4.2.5 多個(gè)路由值83
4.3 調整默認的分片分配行為84
4.3.1 分片分配器簡(jiǎn)介84
4.3.2 even_shard 分片分配器84
4.3.3 balanced分片分配器85
4.3.4 自定義分片分配器85
4.3.5 裁決者86
4.4 調整分片分配88
4.4.1 部署意識89
4.4.2 過(guò)濾91
4.4.3 運行時(shí)更新分配策略92
4.4.4 確定每個(gè)節點(diǎn)允許的總分片數93
4.4.5 更多的分片分配屬性96
4.5 查詢(xún)執行偏好97
4.6 應用我們的知識99
4.6.1 基本假定99
4.6.2 配置100
4.6.3 變化來(lái)了104
4.7 小結105
第5章 管理ElasticSearch106
5.1 選擇正確的目錄實(shí)現-存儲模塊106
5.2 發(fā)現模塊的配置109
5.2.1 Zen發(fā)現109
5.2.2 亞馬遜EC2發(fā)現111
5.2.3 本地網(wǎng)關(guān)114
5.2.4 恢復配置115
5.3 索引段統計116
5.3.1 segments API簡(jiǎn)介116
5.3.2 索引段信息的可視化118
5.4 理解ElasticSearch緩存119
5.4.1 過(guò)濾器緩存119
5.4.2 字段數據緩存121
5.4.3 清除緩存126
5.5 小結127
第6章 故障處理129
6.1 了解垃圾回收器129
6.1.1 Java內存130
6.1.2 處理垃圾回收問(wèn)題131
6.1.3 在類(lèi)UNIX系統中避免內存交換135
6.2 關(guān)于I/O調節136
6.2.1 控制IO節流136
6.2.2 配置136
6.3 用預熱器提升查詢(xún)速度138
6.3.1 為什么使用預熱器138
6.3.2 操作預熱器138
6.3.3 測試預熱器141
6.4 熱點(diǎn)線(xiàn)程144
6.4.1 澄清熱點(diǎn)線(xiàn)程API的用法誤區145
6.4.2 熱點(diǎn)線(xiàn)程API的響應信息145
6.5 現實(shí)場(chǎng)景146
6.5.1 越來(lái)越差的性能146
6.5.2 混雜的環(huán)境和負載不平衡148
6.5.3 我的服務(wù)器出故障了149
6.6 小結150
第7章 改善用戶(hù)搜索體驗151
7.1 改正用戶(hù)拼寫(xiě)錯誤151
7.1.1 測試數據152
7.1.2 深入技術(shù)細節152
7.1.3 completion suggester168
7.2 改善查詢(xún)相關(guān)性172
7.2.1 數據172
7.2.2 改善相關(guān)性的探索之旅174
7.3 小結188
第8章 ElasticSearch Java API189
8.1 ElasticSearch Java API簡(jiǎn)介189
8.2 代碼190
8.3 連接到集群191
8.3.1 成為ElasticSearch節點(diǎn)191
8.3.2 使用傳輸機連接方式192
8.3.3 選擇合適的連接方式193
8.4 API剖析194
8.5 CRUD操作195
8.5.1 讀取文檔195
8.5.2 索引文檔197
8.5.3 更新文檔199
8.5.4 刪除文檔201
8.6 ElasticSearch查詢(xún)203
8.6.1 準備查詢(xún)請求203
8.6.2 構造查詢(xún)203
8.6.3 分頁(yè)206
8.6.4 排序207
8.6.5 過(guò)濾207
8.6.6 切面計算208
8.6.7 高亮209
8.6.8 查詢(xún)建議209
8.6.9 計數210
8.6.10 滾動(dòng)211
8.7 批量執行多個(gè)操作211
8.7.1 批量操作211
8.7.2 根據查詢(xún)刪除文檔212
8.7.3 Multi GET212
8.7.4 Multi Search212
8.8 Percolator213
8.9 explain API214
8.10 構造JSON格式的查詢(xún)和文檔214
8.11 管理API216
8.11.1 集群管理API216
8.11.2 索引管理API219
8.12 小結226
第9章 開(kāi)發(fā)ElasticSearch插件227
9.1 建立Apache Maven項目結構227
9.1.1 了解基本知識228
9.1.2 Maven Java項目的結構228
9.1.3 POM的理念228
9.1.4 運行構建過(guò)程229
9.1.5 引入Maven裝配插件230
9.2 創(chuàng )建一個(gè)自定義river插件232
9.2.1 實(shí)現細節232
9.2.2 測試river238
9.3 創(chuàng )建自定義分析插件240
9.3.1 實(shí)現細節240
9.3.2 測試自定義分析插件247
9.4 小結249