閱讀816 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《深入理解Elasticsearch(原書第2版)》一導讀


image

前  言
歡迎來到Elasticsearch的世界並閱讀本書第2版。通過閱讀本書,我們將帶領你接觸與Elasticsearch緊密相關的各種話題。請注意,本書不是為初學者寫的。筆者將本書作為《Elasticsearch Server, Second Edition》的續作和姊妹篇。相對於《Elasticsearch Server》,本書涵蓋了很多新知識,不過你偶爾也可以在本書中發現一些引自《Elasticsearch Server》的內容。
本書將探討與Elasticsearch和Lucene相關的多個不同主題。首先,我們以介紹Lucene和Elasticsearch的基本概念作為開始,帶領讀者認識Elasticsearch提供的眾多查詢方式。在這裏,將涉及和查詢相關的不同主題,比如結果過濾以及如何為特定場景選擇合適的查詢方式。顯然,Elasticsearch不僅僅隻有查詢功能。因此,本書還將介紹Elasticsearch新加入的聚集功能,以及眾多能夠賦予被索引數據意義的特性,並設法提供更佳的用戶查詢體驗。
對大多數用戶來說,查詢和數據分析是Elasticsearch最吸引人的部分,不過這些還不是我們想要探索的全部內容。因此,本書在涉及索引架構時還會試圖跟讀者探討一些額外話題,比如如何選擇合適的分片數和副本數,如何調整分片分配行為等。當談論Elasticsearch和Lucene之間的關係時,我們還將介紹不同的打分算法、算法之間的差異、如何選擇合適的存儲機製,以及為什麼需要做此選擇。
最後,我們還將觸及Elasticsearch的管理功能,將探討發現和恢複模塊,以及對人類友好的Cat API。Cat API可以幫助我們快速獲取相關的運維信息,它的返回數據組織成一種大多數人都易於閱讀的格式,無需進行JSON解析。我們還將認識和使用部落節點,它能夠為我們提供在多個節點間聯合查詢的能力。
因為本書的書名,我們無法忽略與性能相關的話題,所以我們決定用整整一章來探討性能。我們談論了文檔取值及其相關改進,還介紹了垃圾回收器的工作方式,以及在垃圾回收器未能如我們期望般工作時可以做些什麼。最後,探討了如何擴展Elasticsearch以應對高索引量和查詢量的場景。
和本書第1版一樣,我們決定以開發Elasticsearch插件的話題作為本書結尾。我們將展示如何構建Apache Maven項目,並開發兩個不同類型的插件—自定義REST操作插件和自定義分析插件。
假如你在讀完某些主題後對其產生濃厚的興趣,那麼這本書就是適合你的。希望你在讀完後能夠喜歡這本書。
本書主要內容
第1章先介紹Apache Lucene的工作方式,再介紹Elasticsearch的基本概念,並演示Elasticsearch內部是如何工作的。
第2章描述Lucene評分過程,為什麼要進行查詢改寫,什麼是查詢模板以及如何使用查詢模板。除此之外,還介紹了過濾器的使用,以及如何為特定場景選擇合適的查詢方式。
第3章描述了查詢二次評分、多匹配控製,並介紹了用於做查詢分析的各種聚合類型。關鍵詞項聚合和最優詞項聚合可以根據所含內容片段對文檔進行歸類。除此之外,還介紹了Elasticsearch的parent-child文檔關係處理,並提供了在Elasticsearch中使用腳本的相關知識。
第4章覆蓋了有關用戶體驗提升的相關話題。本章介紹了查詢建議(suggester),它能幫助修正查詢中的拚寫錯誤並構建高效的自動完成(autocomplete)機製。除此之外,通過實際的案例展示如何通過使用不同查詢類型和Elasticsearch的其他功能來提高查詢相關性。
第5章介紹了以下技術:如何選擇合適的分片及副本數,路由是如何工作的,索引分片機製是如何工作的以及如何影響分片行為。同時介紹了什麼是查詢執行偏好,以及它是如何影響查詢執行的。
第6章描述如何修改Lucene評分以及如何選擇備用的評分算法。本章也介紹了Elasticsearch的準實時搜索和索引,事務日誌的使用,理解索引的段合並,以及如何調整段合並來適應應用場景。在本章最後,還將介紹Elasticsearch的緩存機製和請求打斷器,以避免出現內存用盡的故障。
第7章介紹了什麼是發現、網關、恢複模塊,如何配置這些模塊,以及有哪些令人心煩的疑難點。還介紹了什麼是Cat API,如何把數據備份到各種雲服務上(比如亞馬遜的AWS和微軟的Azure),以及如何從雲服務上恢複數據。最後還介紹了如何使用部落節點進行聯盟搜索。
第8章覆蓋了與Elasticsearch性能相關的各種主題,從使用文檔取值來優化字段數據緩存的內存使用,到JVM垃圾回收器的工作原理,再到查詢基準測試,最後到如何擴展Elasticsearch以適應更高的索引量和查詢量場景。
第9章通過演示如何開發你自己的REST操作插件和查詢語言分析插件來介紹Elasticsearch的插件開發。
閱讀本書的必備資源
本書寫作時采用了Elasticsearch的1.4.x版本,所有的範例代碼應該能在該版本下正常運行。除此之外,讀者需要一個能發送HTTP請求的命令行工具,例如curl,該工具在絕大多數操作係統上是可用的。請記住,本書的所有範例都使用了curl。如果讀者想使用其他工具,請注意檢查請求的格式,以保證你所選擇的工具能正確解析它。
除此之外,為了運行第9章的範例,需要讀者的機器上已安裝了JDK,並且需要一個編輯器來開發相關代碼(或者類似Eclipse的Java IDE)。另外,還要求使用Apache Maven進行代碼的管理與構建。
本書的目標讀者
本書的目標讀者是那些對Elasticsearch基本概念已經很熟悉但是又想深入了解其本身,同時也對Apache Lucene、JVM垃圾收集感興趣的Elasticsearch用戶和發燒友。除此之外,想了解如何改進查詢相關性、如何使用Elasticsearch Java API、如何編寫自定義插件的讀者,也會發現本書的趣味性和實用性。
如果你是Elasticsearch的初學者,連查詢和索引這些基本概念都不熟悉,那麼你會發現本書的絕大多數章節難以理解,因為這些內容假定讀者已經有相關背景知識。如果是這種情況,建議參考Packt出版社出版的另一本關於Elasticsearch的圖書—《Elasticsearch Server, Second Edition》。

目 錄

第1章  Elasticsearch簡介
1.1  Apache Lucene簡介
1.1.1  熟悉Lucene
1.1.2  Lucene的總體架構
1.1.3  分析數據
1.1.4  Lucene查詢語言
1.2  何為Elasticsearch
1.2.1  Elasticsearch的基本概念
1.2.2  Elasticsearch架構背後的關鍵概念
1.2.3  Elasticsearch的工作流程
1.3  在線書店示例
1.4  小結
第2章  查詢DSL進階
2.1  Apache Lucene默認評分公式解釋
2.1.1  何時文檔被匹配上
2.1.2  TF/IDF評分公式
2.1.3  Elasticsearch如何看評分
2.1.4  一個例子
2.2  查詢改寫
2.2.1  前綴查詢示例
2.2.2  回到Apache Lucene
2.2.3  查詢改寫的屬性
2.3  查詢模板
2.3.1  引入查詢模板
2.3.2  Mustache模板引擎
2.3.3  把查詢模板保存到文件
2.4  過濾器的使用及作用原理
2.4.1  過濾及查詢相關性
2.4.2  過濾器的工作原理
2.4.3  性能考量
2.4.4  後置過濾和過濾查詢
2.4.5  選擇正確的過濾方式
2.5  選擇正確的查詢方式
2.5.1  查詢方式分類
2.5.2  使用示例
2.6  小結
第3章 不隻是文本搜索
3.1 查詢二次評分
3.1.1 什麼是查詢二次評分
3.1.2 一個查詢例子
3.1.3 二次評分查詢的結構
3.1.4 二次評分參數
3.1.5 總結
3.2 多匹配控製
3.3 重要詞項聚合
3.3.1 一個例子
3.3.2 選擇重要詞項
3.3.3 多值分析
3.3.4 額外的配置
3.3.5 使用限製
3.4 文檔分組
3.4.1 top_hits聚合
3.4.2 一個例子
3.5 文檔關係
3.5.1 對象類型
3.5.2 嵌套文檔
3.5.3 parent-child關係
3.5.4 其他解決方案
3.6 Elasticsearch各版本中腳本的變化
3.6.1 腳本變遷
3.6.2 Groovy簡單介紹
3.6.3 全文檢索中的腳本
3.6.4 Lucene表達式
3.7 小結
第4章 改善用戶搜索體驗
4.1 改正用戶拚寫錯誤
4.1.1 測試數據
4.1.2 深入技術細節
4.1.3 suggester
4.2 改善查詢相關性
4.2.1 數據
4.2.2 改善相關性的探索之旅
4.3 小結
第5章 分布式索引架構
5.1 選擇合適的分片和副本數
5.1.1 分片和過度分配
5.1.2 一個過度分配的正麵例子
5.1.3 多分片與多索引
5.1.4 副本
5.2 路由
5.2.1 分片和數據
5.2.2 測試路由功能
5.2.3 索引時使用路由
5.2.4 別名
5.2.5 多個路由值
5.3 調整默認分片的分配行為
5.3.1 部署意識
5.3.2 過濾
5.3.3 運行時更新分配策略
5.3.4 確定每個節點允許的總分片數
5.3.5 確定每個物理機器允許的總分片數
5.4 查詢執行偏好
5.5 小結
第6章 底層索引控製
6.1 改變Apache Lucene的評分方式
6.1.1 可用的相似度模型
6.1.2 為每字段配置相似度模型
6.1.3 相似度模型配置
6.1.4 選擇默認的相似度模型
6.2 選擇適當的目錄實現—store模塊
6.3 準實時、提交、更新及事務日誌
6.3.1 索引更新及更新提交
6.3.2 事務日誌
6.3.3 準實時讀取
6.4 控製索引合並
6.4.1 選擇正確的合並策略
6.4.2 合並策略配置
6.4.3 調度
6.5 關於I/O調節
6.5.1 控製I/O節流
6.5.2 配置
6.6 理解Elasticsearch緩存
6.6.1 過濾器緩存
6.6.2 字段數據緩存
6.6.3 查詢分片緩存
6.6.4 使用circuit breaker
6.6.5 清除緩存
6.7 小結
第7章 管理Elasticsearch
7.1 發現和恢複模塊
7.1.1 發現模塊的配置
7.1.2 主節點
7.1.3 網關和恢複模塊的配置
7.1.4 索引恢複API
7.2 使用人類友好的Cat API
7.2.1 基礎知識
7.2.2 使用Cat API
7.2.3 一些例子
7.3 備份
7.4 聯盟搜索
7.4.1 測試用的集群
7.4.2 建立部落節點
7.4.3 通過部落節點讀取數據
7.4.4 通過部落節點寫入數據
7.4.5 處理索引衝突
7.4.6 屏蔽寫操作
7.5 小結
第8章 提高性能
8.1 使用doc values來優化查詢
8.1.1 字段緩存存在的問題
8.1.2 使用doc values的例子
8.2 了解垃圾回收器
8.2.1 Java內存
8.2.2 解決垃圾回收問題
8.2.3 在類UNIX係統上避免內存交換
8.3 對查詢做基準測試
8.3.1 為基準測試配置集群
8.3.2 進行基準測試
8.3.3 控製運行中的基準測試
8.4 熱點線程
8.4.1 熱點線程的使用說明
8.4.2 熱點線程API的響應
8.5 擴展Elasticsearch
8.5.1 垂直擴展
8.5.2 水平擴展
8.5.3 在高負載的場景下使用Elasticsearch
8.6 小結
第9章 開發Elasticsearch插件
9.1 創建Maven項目
9.2 了解基本知識
9.2.1 Maven Java項目的結構
9.2.2 POM的理念
9.2.3 執行構建過程
9.2.4 引入Maven裝配插件
9.3 創建自定義REST行為
9.3.1 設定
9.3.2 實現細節
9.4 創建自定義分析插件
9.4.1 實現細節
9.4.2 測試自定義分析插件
9.5 小結

最後更新:2017-06-23 23:02:37

  上一篇:go  ???Hadoop???????????????????????????1???-??????-????????????-?????????
  下一篇:go  6月23日雲棲精選夜讀:重磅!阿裏媽媽首次公開自研CTR預估核心算法MLR