Elasticsearch 實戰 (Elasticsearch in Action)

[美] 拉杜·喬戈 馬修·李·欣曼羅伊·羅素

買這商品的人也買了...

商品描述

本書主要展示如何使用Elasticsearch構建可擴展的搜索應用程序。書中覆蓋了Elasticsearch的主要特性,從使用不同的分析器和查詢類型進行相關性調優,到使用聚集功能進行實時性分析,還有地理空間搜索和文檔過濾等更多吸引人的特性。
全書共分兩個部分,第一部分解釋了核心特性,內容主要涉及Elasticsearch的介紹,數據的索引、更新和刪除,數據的搜索,數據的分析,使用相關性進行搜索,使用聚集來探索數據,文檔間的關系等;第二部分介紹每個特性工作的更多細節及其對性能和可擴展性的影響,以便對核心功能進行產品化,內容主要涉及水平擴展和性能提升等。此外,本書還有6個附錄(網上下載),提供了讀者應該知道的特性,展示了關於地理空間搜索和聚集,如何管理Elasticsearch插件,學習在搜索結果中如何高亮查詢單詞,在生產環境中用來協助管理Elasticsearch的第三方的監控工具有哪些,如何使用Percolator過濾為多個查詢匹配少量文檔,如何使用不同的建議器來實現自動完成的功能。

作者簡介

作者:Radu Gheorghe,Matthew Lee Hinman,Roy Russo

作者簡介
Radu Gheorghe是搜索技術顧問和軟件工程師。
Matthew Lee Hinman開發過基於雲的高可用系統。
Roy Russo是預測分析方面的專家。

譯者簡介

黃申博士,現任LinkedIn(領英)資深數據科學家,
畢業於上海交通大學計算機科學與工程專業,師從俞勇教授。
微軟學者、IBM ExtremeBlue天才計劃成員。
長期專注於大數據相關的搜索、推薦、廣告以及用戶精準化領域。曾在微軟亞洲研究院、
eBay中國、沃爾瑪1號店(現京東1號店)和大潤發飛牛網擔任要職,帶團隊完成了若干公司級的戰略項目。
同時在國際上發表20多篇論文,並擁有10多項國際專利。
《計算機工程》特邀審稿專家,2016年出版了《大數據架構商業之路》一書,廣受好評。
因對業界做出卓越貢獻,獲得美國政府頒發的“美國傑出人才”稱號。

目錄大綱

第一部分
第1章Elasticsearch介紹2 
1.1用Elasticsearch解決搜索問題3 
1.1.1提供快速查詢3 
1.1.2確保結果的相關性4 
1.1.3超越精確匹配5 
1.2探索典型的Elasticsearch使用案例6 
1.2.1將Elasticsearch作為主要的後端系統7 
1.2.2將Elasticsearch添加到現有的系統7 
1.2.3將Elasticsearch和現有工具一同使用8 
1.2.4 Elasticsearch的主要特性10 
1.2.5擴展Lucene的功能10 
1.2. 6在Elasticsearch中組織數據12 
1.2.7安裝Java語言12 
1.2.8下載並啟動Elasticsearch 13 
1.2.9驗證是否工作14 
1.3小結16 

第2章深入功能17 
2.1理解邏輯設計:文檔、類型和索引18 
2.1 .1文檔19 
2.1.2類型20 
2.1.3索引21 
2.2理解物理設計:節點和分片21 
2.2.1創建擁有一個或多個節點的集群22 
2.2.2理解主分片和副本分片23
2.2.3在集群中分發分片25 
2.2.4分佈式索引和搜索26 
2.3索引新數據27 
2.3.1通過cURL索引一篇文檔28 
2.3.2創建索引和映射類型30 
2.3.3通過代碼樣例索引文檔31 
2.4搜索並獲取數據32 
2.4.1在哪裡搜索33 
2.4.2回复的內容33 
2.4.3如何搜索36 
2.4.4通過ID獲取文檔39 
2.5配置Elasticsearch 40 
2.5.1在elasticsearch.yml中指定集群的名稱40 
2.5.2通過logging.yml指定詳細日誌記錄41 
2.5.3調整JVM設置41 
2.6在集群中加入節點42 
2.6.1啟動第二個節點43 
2.6.2增加額外的節點44 
2.7小結45 

第3章索引、更新和刪除數據47 
3.1使用映射來定義各種文檔48 
3.1.1檢索和定義映射49 
3.1.2擴展現有的映射50 
3.2用於定義文檔字段的核心類型51 
3.2.1字符串類型52 
3.2.2數值類型54 
3.2.3日期類型55 
3.2.4布爾類型56
3.3數組和多字段56 
3.3.1數組56 
3.3.2多字段57 
3.4使用預定義字段58 
3.4.1控制如何存儲和搜索文檔59 
3.4.2識別文檔61 
3.5更新現有文檔63 
3.5.1使用更新API 64 
3.5.2通過版本來實現並發控制66 
3.6刪除數據69 
3.6.1刪除文檔70 
3.6.2刪除索引71 
3.6.3關閉索引72 
3.6.4重新索引樣本文檔73 
3.7小結73 

第4章搜索數據74 
4.1搜索請求的結構75 
4.1.1確定搜索範圍75 
4.1.2搜索請求的基本模塊76 
4.1.3基於請求主體的搜索請求78 
4.1.4理解回复的結構81 
4.2介紹查詢和過濾器DSL 82 
4.2 .1 match查詢和term過濾器82 
4.2.2常用的基礎查詢和過濾器85 
4.2.3 match查詢和term過濾器91 
4.2.4 phrase_prefix查詢92 
4.3組合查詢或複合查詢93 
4.3.1 bool查詢93 
4.3 .2 bool過濾器96
4.4超越match和過濾器查詢98 
4.4.1 range查詢和過濾器98 
4.4.2 prefix查詢和過濾器99 
4.4.3 wildcard查詢100 
4.5使用過濾器查詢字段的存在性102 
4.5.1 exists過濾器102 
4.5 .2 missing過濾器102 
4.5.3將任何查詢轉變為過濾器103 
4.6為任務選擇最好的查詢104 
4.7小結105 

第5章分析數據106 
5.1什麼是分析106 
5.1.1字符過濾107 
5.1.2切分為分詞108 
5.1.3分詞過濾器108 
5.1.4分詞索引108 
5.2為文檔使用分析器109 
5.2.1在索引創建時增加分析器109 
5.2.2在Elasticsearch的配置中添加分析器111 
5.2.3在映射中指定某個字段的分析器112 
5.3使用分析API來分析文本113 
5.3.1選擇一個分析器114 
5.3.2通過組合即興地創建分析器115 
5.3.3基於某個字段映射的分析115 
5.3 .4使用詞條向量API來學習索引詞條116 
5.4分析器、分詞器和分詞過濾器117
5.4.1內置的分析器117 
5.4.2分詞器119 
5.4.3分詞過濾器122 
5.5 N元語法、側邊N元語法和滑動窗口128 
5.5.1一元語法過濾器128 
5.5.2二元語法過濾器129 
5.5.3三元語法過濾器129 
5.5.4設置min_gram和max_gram 129 
5.5.5側邊N元語法過濾器129 
5.5.6 N元語法的設置130 
5.5.7滑動窗口分詞過濾器131 
5.6提取詞幹132 
5.6.1算法提取詞幹133 
5.6.2使用字典提取詞幹133 
5.6.3重寫分詞過濾器的詞幹提取134 
5.7小結134 

第6章使用相關性進行搜索136 
6.1 Elasticsearch的打分機制137 
6.1.1文檔打分是如何運作的137 
6.1.2詞頻137 
6.1.3逆文檔頻率138 
6.1.4 Lucene評分公式138 
6.2其他打分方法139 
6.3 boosting 141 
6.3.1索引期間的boosting 142 
6.3.2查詢期間的boosting 142 
6.3.3跨越多個字段的查詢143
6.4使用“解釋”來理解文檔是如何被評分的144 
6.5使用查詢再打分來減小評分操作的性能影響147 
6.6使用function_score來定制得分148 
6.6.1 weight函數149 
6.6.2合併得分150 
6.6.3 field_value_factor函數151 
6.6.4腳本152 
6.6.5隨機152 
6.6.6衰減函數153 
6.6.7配置選項155 
6.7嘗試一起使用它們吧156 
6.8使用腳本來排序157 
6.9字段數據158 
6.9.1字段數據緩存158 
6.9 .2字段數據用在哪裡159 
6.9.3管理字段數據160 
6.10小結163 

第7章使用聚集來探索數據164 
7.1理解聚集的具體結構166 
7.1.1理解聚集請求的結構166 
7.1.2運行在查詢結果上的聚集168 
7.1.3過濾器和聚集169 
7.2度量聚集170 
7.2.1統計數據171 
7.2.2高級統計172 
7.2.3近似統計173 
7.3多桶型聚集176 
7.3.1 terms聚集177
7.3.2 range聚集183 
7.3.3 histogram聚集185 
7.4嵌套聚集187 
7.4.1嵌套多桶聚集189 
7.4.2通過嵌套聚集獲得結果分組190 
7.4.3使用單桶聚集192 
7.5小結196 

第8章文檔間的關係197 
8.1定義文檔間關係的選項概覽197 
8.1.1對像類型198 
8.1.2嵌套類型200 
8.1.3父子關係200 
8.1.4反規範化200 
8.2將對像作為字段值202 
8.2.1映射和索引對象203 
8.2.2在對像中搜索204 
8.3嵌套類型:聯結嵌套的文檔206 
8.3.1映射並索引嵌套文檔207 
8.3.2搜索和聚集嵌套文檔210 
8.4父子關係:關聯分隔的文檔216 
8.4.1子文檔的索引、更新和刪除218 
8.4.2在父文檔和子文檔中搜索220 
8.5反規範化:使用冗餘的數據管理227 
8.5.1反規範化的使用案例228 
8.5.2索引、更新和刪除反規範化的數據230 
8.5.3查詢反規範化的數據233 
8.6應用端的連接234 
8.7小結235

第二部分

第9章向外擴展238 
9.1向Elasticsearch集群加入節點238 
9.2發現其他Elasticsearch節點241 
9.2.1通過廣播來發現241 
9.2.2通過單播來發現242 
9.2.3選舉主節點和識別錯誤243 
9.2.4錯誤的識別244 
9.3刪除集群中的節點245 
9.4升級Elasticsearch的節點250 
9.4.1進行輪流重啟250 
9.4.2最小化重啟後的恢復時間251 
9.5使用_cat API 252 
9.6擴展策略254 
9.6. 1過度分片254 
9.6.2將數據切分為索引和分片255 
9.6.3最大化吞吐量256 
9.7別名257 
9.7.1什麼是別名258 
9.7.2別名的創建259 
9.8路由261 
9.8.1為什麼使用路由261 
9.8.2路由策略262 
9.8.3使用_search_shards API來決定搜索在哪裡執行263 
9.8.4配置路由265 
9.8.5結合路由和別名265 
9.9小結267 

第10章提升性能268
10.1合併請求269 
10.1.1批量索引、更新和刪除269 
10.1.2多條搜索和多條獲取API接口273 
10.2優化Lucene分段的處理276 
10.2.1刷新和沖刷的閾值276 
10.2.2合併以及合併策略279 
10.2.3存儲和存儲限流282 
10.3充分利用緩存285 
10.3.1過濾器和過濾器緩存285 
10.3.2分片查詢緩存291 
10.3.3 JVM堆和操作系統緩存293 
10.3.4使用預熱器讓緩存熱身296 
10.4其他的性能權衡297 
10.4.1大規模的索引還是昂貴的搜索298 
10.4.2調優腳本,要么別用它301 
10.4.3權衡網絡開銷,更少的數據和更好的分佈式得分305 
10.4.4權衡內存,進行深度分頁308 
10.5小結310 

第11章管理集群311 
11.1改善默認的配置311 
11.1.1索引模板312 
11.1.2默認的映射315 
11.2分配的感知318 
11.2.1基於分片的分配318 
11.2.2強制性的分配感知319 
11.3監控瓶頸320
11.3.1檢查集群的健康狀態320 
11.3.2 CPU:慢日誌、熱線程和線程池322 
11.3.3內存:堆的大小、字段和過濾器緩存326 
11.3.4操作系統緩存330 
11.3.5存儲限流330 
11.4備份你的數據331 
11.4.1快照API 331 
11.4.2將數據備份到共享的文件系統332 
11.4.3從備份中恢復335 
11.4.4使用資料庫插件336 
11.5小結337 

附錄A處理地理空間的數據(網上下載)
附錄B插件(網上下載)
附錄C高亮(網上下載)
附錄D Elasticsearch的監控插件(網上下載)
附錄E使用滲濾器將搜索顛倒過來(網上下載)
附錄F為自動完成和“您是指”功能使用建議器(網上下載)