天天看點

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

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

歡迎來到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的插件開發。

譯者序

作者簡介

評審者簡介

前言

<a href="https://yq.aliyun.com/articles/90273">第1章 elasticsearch簡介</a>

<a href="https://yq.aliyun.com/articles/90273">1.1 apache lucene簡介</a>

1.1.1 熟悉lucene

1.1.2 lucene的總體架構

1.1.3 分析資料

1.1.4 lucene查詢語言

<a href="https://yq.aliyun.com/articles/90275">1.2 何為elasticsearch</a>

1.2.1 elasticsearch的基本概念

1.2.2 elasticsearch架構背後的關鍵概念

1.2.3 elasticsearch的工作流程

<a href="https://yq.aliyun.com/articles/90277">1.3 線上書店示例</a>

<a href="https://yq.aliyun.com/articles/90278">1.4 小結</a>

<a href="https://yq.aliyun.com/articles/90285">第2章 查詢dsl進階</a>

<a href="https://yq.aliyun.com/articles/90285">2.1 apache lucene預設評分公式解釋</a>

2.1.1 何時文檔被比對上

2.1.2 tf/idf評分公式

2.1.3 elasticsearch如何看評分

2.1.4 一個例子

<a href="https://yq.aliyun.com/articles/90290">2.2 查詢改寫</a>

2.2.1 字首查詢示例

2.2.2 回到apache lucene

2.2.3 查詢改寫的屬性

<a href="https://yq.aliyun.com/articles/90301">2.3 查詢模闆</a>

2.3.1 引入查詢模闆

2.3.2 mustache模闆引擎

2.3.3 把查詢模闆儲存到檔案

<a href="https://yq.aliyun.com/articles/90305">2.4 過濾器的使用及作用原理</a>

2.4.1 過濾及查詢相關性

2.4.2 過濾器的工作原理

2.4.3 性能考量

2.4.4 後置過濾和過濾查詢

2.4.5 選擇正确的過濾方式

<a href="https://yq.aliyun.com/articles/90338">2.5 選擇正确的查詢方式</a>

2.5.1 查詢方式分類

2.5.2 使用示例

<a href="https://yq.aliyun.com/articles/90340">2.6 小結</a>

第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 小結