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