ElasticSearch:可擴展的開源彈性搜尋解決方案

ElasticSearch:可擴展的開源彈性搜尋解決方案

《ElasticSearch:可擴展的開源彈性搜尋解決方案》是2015年1月1日電子工業出版社出版的圖書,作者是【波蘭】Marek Rogoziński(拉法烏.庫奇,馬雷克.羅戈津斯基)。

內容簡介

《ElasticSearch:可擴展的開源彈性搜尋解決方案》基於ElasticSearch 的0.2 版本,覆蓋了ElasticSearch 各種功能和命令的套用,全面、詳細地介紹了開源、分散式、RESTful,具有全文檢索功能的搜尋引擎ElasticSearch。《ElasticSearch:可擴展的開源彈性搜尋解決方案》前兩章著重介紹了ElasticSearch 的基本功能和用法,包括ElasticSearch 的安裝和配置、REST API 的使用方法,以及怎樣使用Query DSL 語句進行查詢、過濾、排序等。接下來的4 章是對ElasticSearch 基本功能的擴展,主要介紹了如何使用統計功能來計算查詢返回結果的聚集數據、如何實現自動補全功能、如何使用ElasticSearch 的空間數據處理能力,以及如何使用預期搜尋功能等。第7 章介紹了ElasticSearch 管理API 的能力,如控制分片部署位置、操縱集群等功能。在第8 章將學習到如何處理使用ElasticSearch 過程中可能遇到的常見問題。

《ElasticSearch:可擴展的開源彈性搜尋解決方案》內容豐富、全面,基本概念的講解細緻、深入淺出。各種功能和命令的介紹,都配以實踐操作和詳細的代碼。《ElasticSearch:可擴展的開源彈性搜尋解決方案》是初學者學習ElasticSearch 不可多得的一本入門好書,對使用過ElasticSearch 及知道Apache Solr搜尋引擎的人也頗有幫助。

ElasticSearch :可擴展的開源彈性搜尋解決方案( 國內唯一 ES 技術書 全面剖析這一快速、靈活、可擴展的搜尋解決方案

【波蘭】Marek Rogoziński(拉法烏.庫奇,馬雷克.羅戈津斯基) 著

時金橋 柳廳文 徐菲 張浩亮 譯

ISBN 978-7-121-25200-6

2015 年1月出版

定價:69.00元

292

16

編輯推薦

ElasticSearch是一個基於Apache Lucene構建的開源搜尋伺服器。它提供了一個可擴展的搜尋解決方案,內置支持近實時搜尋和多租戶。

本書將教你如何構建一個快速、靈活、可擴展的搜尋解決方案,通過建立自定義集群進入ElasticSearch的世界。通過學習數據索引和分析,你將掌握ElasticSearch的強大功能,包括如何搜尋數據、如何擴大搜尋範圍,以及如何進行集群管理。

從建立自己的ElasticSearch集群開始,然後進行搜尋並擴展搜尋參數,你就可以創建一個完全自定義的搜尋解決方案。在此基礎上,你將進一步地學習ElasticSearch的查詢API,以及如何使用強大的過濾和統計功能。在ElasticSearch旅程最後總結的一些章節,幫助讀者控制和調整集群,學習分片分配、網關模式配置等知識。

本書是為希望利用ElasticSearch創建一個快速、靈活的搜尋解決方案的開發者而撰寫的。如果你正試圖學習ElasticSearch或者希望變得更加精通,本書也同樣適合。開始學習本書時你不需要知道關於ElasticSearch的任何知識,但知道一些資料庫和查詢的基本知識是必需的。

你將從本書學到

·配置和創建一個ElasticSearch索引

·使用ElasticSearch查詢DSL進行各種查詢

·在不損失性能的情況下高效和精確地使用過濾器

·實現自動補全功能

·高亮數據和地理信息搜尋以得到更好的結果

·理解ElasticSearch如何返回結果及如何驗證這些結果

·使用統計和相似功能從搜尋中獲得更多,並提升客戶的搜尋體驗

·使用ElasticSearch API和第三方監控方案監控集群狀態與集群健康狀況

內容提要

《ElasticSearch:可擴展的開源彈性搜尋解決方案》基於ElasticSearch 的0.2 版本,覆蓋了ElasticSearch 各種功能和命令的套用,全面、詳細地介紹了開源、分散式、RESTful,具有全文檢索功能的搜尋引擎ElasticSearch。《ElasticSearch:可擴展的開源彈性搜尋解決方案》前兩章著重介紹了ElasticSearch 的基本功能和用法,包括ElasticSearch 的安裝和配置、REST API 的使用方法,以及怎樣使用Query DSL 語句進行查詢、過濾、排序等。接下來的4 章是對ElasticSearch 基本功能的擴展,主要介紹了如何使用統計功能來計算查詢返回結果的聚集數據、如何實現自動補全功能、如何使用ElasticSearch 的空間數據處理能力,以及如何使用預期搜尋功能等。第7 章介紹了ElasticSearch 管理API 的能力,如控制分片部署位置、操縱集群等功能。在第8 章將學習到如何處理使用ElasticSearch 過程中可能遇到的常見問題。

《ElasticSearch:可擴展的開源彈性搜尋解決方案》內容豐富、全面,基本概念的講解細緻、深入淺出。各種功能和命令的介紹,都配以實踐操作和詳細的代碼。《ElasticSearch:可擴展的開源彈性搜尋解決方案》是初學者學習ElasticSearch 不可多得的一本入門好書,對使用過ElasticSearch 及知道Apache Solr搜尋引擎的人也頗有幫助。

目錄

第1章 ElasticSearch集群入門 1

1.1 什麼是ElasticSearch 1

1.1.1 索引 2

1.1.2 文檔 2

1.1.3 文檔類型 2

1.1.4 節點和集群 3

1.1.5 分片 3

1.1.6 副本 3

1.2 安裝和配置ElasticSearch集群 3

1.3 目錄結構 4

1.4 配置ElasticSearch 4

1.5 運行ElasticSearch 5

1.6 關閉ElasticSearch 7

1.7 作為系統服務運行ElasticSearch 8

1.8 基於REST API的數據操作 8

1.8.1 什麼是REST 8

1.8.2 在ElasticSearch中存儲數據 9

1.8.3 創建新文檔 9

1.8.4 檢索文檔 11

1.8.5 更新文檔 12

1.8.6 刪除文檔 13

1.9 手工創建索引與配置映射 13

1.9.1 索引 14

1.9.2 文檔類型 14

1.9.3 索引操作 14

1.9.4 模式映射 15

1.10 動態映射和模板 28

1.10.1 類型確定機制 28

1.10.2 動態映射 31

1.10.3 模板 32

1.11 路由選擇的重要性 34

1.11.1 如何進行索引 34

1.11.2 搜尋是如何工作的 35

1.11.3 路由選擇 37

1.11.4 routing參數 38

1.11.5 _routing欄位 38

1.12 索引別名及其用途 39

1.12.1 別名的定義 40

1.12.2 創建別名 40

1.12.3 修改別名 41

1.12.4 兩種命令的組合 41

1.12.5 獲得所有的別名 41

1.12.6 過濾別名 42

1.12.7 別名和路由選擇 43

1.13 本章小結 43

第2章 搜尋數據 44

2.1 查詢和索引的過程 44

2.2 本章案例使用的映射 45

2.3 查詢ElasticSearch 47

2.3.1 簡單查詢 48

2.3.2 分頁和結果規模 50

2.3.3 返回版本號 50

2.3.4 限制結果分數 52

2.3.5 指定返回欄位 53

2.3.6 使用script_fields 55

2.3.7 選擇合適的搜尋類型(高級選項) 57

2.3.8 指定搜尋執行的位置(高級選項) 58

2.4 基本查詢 58

2.4.1 term查詢 59

2.4.2 terms查詢 60

2.4.3 match查詢 60

2.4.4 multi_match查詢 62

2.4.5 query_string查詢 63

2.4.6 field查詢 66

2.4.7 ids查詢 67

2.4.8 prefix查詢 68

2.4.9 fuzzy_like_this查詢 68

2.4.10 fuzzy_like_this_field查詢 69

2.4.11 fuzzy查詢 70

2.4.12 match_all查詢 71

2.4.13 wildcard查詢 72

2.4.14 more_like_this查詢 73

2.4.15 more_like_this_field查詢 74

2.4.16 range查詢 75

2.4.17 查詢重寫 75

2.5 過濾查詢結果 76

2.5.1 使用過濾器 77

2.5.2 range過濾器 78

2.5.3 exists過濾器 80

2.5.4 missing過濾器 80

2.5.5 script過濾器 81

2.5.6 type過濾器 81

2.5.7 limit過濾器 81

2.5.8 ids過濾器 82

2.5.9 其他功能 82

2.5.10 bool、and、or和not過濾器 83

2.5.11 過濾器的命名 84

2.5.12 過濾器的快取 87

2.6 複合查詢 87

2.6.1 bool查詢 88

2.6.2 boosting查詢 89

2.6.3 constant_score查詢 90

2.6.4 indices查詢 90

2.6.5 custom_filters_score查詢 91

2.6.6 custom_boost_factor查詢 93

2.6.7 custom_score查詢 93

2.7 數據排序 94

2.7.1 默認排序 94

2.7.2 選擇用於排序的欄位 95

2.7.3 指定缺失欄位的行為 97

2.7.4 動態標準 97

2.7.5 排序歸類和不同國家的字元 98

2.8 使用腳本 98

2.8.1 腳本中可用的對象 99

2.8.2 MVEL 100

2.8.3 其他語言 100

2.8.4 腳本庫 101

2.8.5 本地代碼 102

2.9 本章小結 104

第3章 擴展結構與搜尋 105

3.1 索引非平面數據 105

3.1.1 數據 106

3.1.2 對象 106

3.1.3 數組 107

3.1.4 映射 107

3.1.5 開啟還是關閉動態映射 109

3.1.6 向ElasticSearch傳送映射檔案 110

3.2 利用額外的內部信息擴展索引結構 111

3.2.1 標識符欄位 111

3.2.2 _type欄位 113

3.2.3 _all欄位 113

3.2.4 _source欄位 114

3.2.5 _boost欄位 115

3.2.6 _index欄位 115

3.2.7 _size欄位 116

3.2.8 _timestamp欄位 117

3.2.9 _ttl欄位 118

3.3 高亮 119

3.3.1 高亮功能入門 120

3.3.2 欄位配置 121

3.3.3 底層實現 121

3.3.4 配置HTML標籤 122

3.3.5 控制高亮片段 123

3.3.6 全局與局部設定 123

3.3.7 僅顯示匹配欄位 124

3.4 自動補全 127

3.4.1 prefix查詢 128

3.4.2 edgeNGram 128

3.4.3 統計 131

3.5 處理檔案 134

3.6 地理信息 138

3.6.1 為空間搜尋準備映射 138

3.6.2 示例數據 139

3.6.3 示例查詢 139

3.6.4 geo_bounding_box過濾器 141

3.6.5 限定距離 143

3.7 本章小結 144

第4章 搜尋最佳化 145

4.1 為什麼文檔被檢索到 145

4.1.1 理解欄位分析過程 146

4.1.2 解釋查詢 148

4.2 用加權查詢影響得分 149

4.2.1 什麼是權值(boost) 149

4.2.2 在查詢中使用權值 150

4.2.3 修改打分 153

4.3 什麼時候索引時加權有意義 162

4.3.1 在輸入數據中定義欄位加權 162

4.3.2 在輸入數據中對文檔加權 162

4.3.3 在映射中定義加權 163

4.4 具有相同含義的詞 163

4.4.1 同義詞(synonym)過濾器 164

4.4.2 定義同義詞規則 165

4.4.3 查詢時或索引時同義詞擴展 167

4.5 搜尋不同語言的內容 167

4.5.1 為什麼我們需要對語言區分處理 167

4.5.2 如何處理多種語言 168

4.5.3 檢測文檔的語言 168

4.5.4 示例文檔 169

4.5.5 映射 169

4.5.6 查詢 171

4.6 使用跨度查詢 174

4.6.1 什麼是跨度 175

4.6.2 span_term查詢 175

4.6.3 span_first查詢 176

4.6.4 span_near查詢 177

4.6.5 span_or查詢 179

4.6.6 span_not查詢 181

4.6.7 性能考慮 182

4.7 本章小結 182

第5章 組合索引、分析和搜尋 183

5.1 索引樹形結構 183

5.2 利用更新API修改索引結構 186

5.2.1 映射 186

5.2.2 添加一個新欄位 186

5.2.3 修改欄位 187

5.3 使用嵌套對象 188

5.4 使用父子關係 192

5.4.1 映射和索引 192

5.4.2 查詢 194

5.4.3 父子關係和過濾 196

5.4.4 性能考慮 196

5.5 從其他系統獲取數據:river 196

5.5.1 我們需要什麼和river是什麼 196

5.5.2 安裝和配置river 197

5.6 批量索引以加快索引過程 200

5.6.1 如何準備數據 200

5.6.2 索引數據 201

5.6.3 是否有可能更快 203

5.7 本章小結 203

第6章 搜尋之外 204

6.1 統計 204

6.1.1 文檔結構 205

6.1.2 返回結果 205

6.1.3 query統計 206

6.1.4 filter統計 207

6.1.5 terms統計 208

6.1.6 range統計 210

6.1.7 histogram統計 212

6.1.8 statistical統計 214

6.1.9 terms_stats統計 216

6.1.10 geo_distance統計 217

6.1.11 過濾統計結果 218

6.1.12 統計計算範圍 219

6.1.13 統計計算的記憶體考慮 222

6.2 相似(More Like This) 223

6.2.1 示例數據 223

6.2.2 發現相似文檔 223

6.3 反查 225

6.3.1 準備反查器 225

6.3.2 深入學習 228

6.4 本章小結 229

第7章 管理集群 230

7.1 監控集群狀態與健康狀況 230

7.1.1 集群健康API 231

7.1.2 索引統計API 233

7.1.3 狀態API 235

7.1.4 節點信息API 236

7.1.5 節點狀態API 237

7.1.6 集群狀態API 237

7.1.7 索引分段API 238

7.2 控制分片和副本的分配 238

7.2.1 顯式控制分配 238

7.2.2 集群範圍內分配 240

7.2.3 每個節點上的分片和副本數量 241

7.2.4 手動移動分片和副本 241

7.3 實例和集群狀態診斷工具 243

7.3.1 Bigdesk外掛程式 243

7.3.2 elasticsearch-head外掛程式 244

7.3.3 elasticsearch-paramedic外掛程式 245

7.3.4 SPM工具 246

7.4 ElasticSearch時光機 247

7.4.1 網關模組 247

7.4.2 恢復控制 250

7.5 節點探索 251

7.5.1 探索類型 251

7.5.2 主節點 251

7.5.3 設定集群名稱 253

7.5.4 配置多播 253

7.5.5 配置單播 253

7.5.6 節點ping設定 254

7.6 ElasticSearch外掛程式 254

7.6.1 安裝外掛程式 254

7.6.2 刪除外掛程式 255

7.6.3 外掛程式類型 255

7.7 本章小結 256

第8章 問題處理 257

8.1 為什麼靠後頁面中的結果會比較慢 257

8.1.1 問題是什麼 258

8.1.2 滾動(scrolling)機制來救急 258

8.2 控制集群再平衡 260

8.2.1 什麼是再平衡 261

8.2.2 集群何時準備就緒 261

8.2.3 集群再平衡設定 261

8.3 驗證查詢 263

8.4 預熱(warming up) 265

8.4.1 定義一個新的預熱查詢 266

8.4.2 獲取已定義的預熱查詢 267

8.4.3 刪除一個預熱查詢 269

8.4.4 關閉預熱功能 269

8.4.5 如何選擇預熱查詢 269

8.5 本章小結 270

作者簡介

RafałKuć是一位天生的團隊領導者和軟體開發者。他現在在Sematext Group公司做顧問和軟體工程師,專注於開源技術,如Apache Lucene與Solr、ElasticSearch及Hadoop軟體堆疊。從銀行軟體到電子商務產品,他在不同的軟體公司有超過11年的從業經歷。他主要專注於Java,但是對任何有助於簡單、快速達到目標的工具或程式設計語言都保持開放態度。Rafał還是solr.pl網站的創始人之一,在這裡他試圖和大家分享知識,幫助大家解決有關Solr和Lucene的問題。他還在世界各地的各種會議上做講者,例如LuceneEurocon、Berlin Buzzwords及ApacheCon。

Rafał從2002年起開啟了他的Lucene之旅,但那時他並非對Lucene一見鍾情。當他在2003年年底回到Lucene時,他改變了關於此框架的想法,看到了其在搜尋技術方面的潛力。後來Solr出現了,事情就是這樣的。在2010年中,他開始使用ElasticSearch。如今,Lucene、Solr、ElasticSearch和信息檢索是他的主要興趣所在。

Rafał還是Apache Solr 3.1 Cookbook一書的作者,其升級版本Apache Solr 4 Cookbook由Packt Publishing公司出版。

媒體評論

ElasticSearch最佳入門!毫無疑問,我們終於迎來這本史上最佳的ElasticSearch入門圖書。對比ElasticSearch可輕鬆帶來的幾千美金級別的便利和受益,買這本書和閱讀這本書的代價實在微不足道。它可以教會你更多關於ElasticSearch的知識,而這是你即使花幾十個小時在網上搜尋,或看那些爛教程所不可比擬的。這本書內容組織的妙味在於,不管你是逐頁閱讀全書,還是在需要做具體事情時加以參考,這本書都同樣適合。

——David

ES領域的首部傑作!最重要的莫過於這是ElasticSearch第一本也是唯一一本圖書,而ES官網上的文檔實在爛。這本書超級易讀,完整了覆蓋了ES的方方面面,包括安裝、配置以及REST API。這本書內容組織完善,各章之間的銜接非常順暢。作者本人對ES的每一話題都給予足夠關注,比如索引、搜尋、高級搜尋及其他。讀者還可以再作者部落格上不斷看到關於ES版本升級後本書的內容更新。

——Bhaskar K

前言

歡迎閱讀本書。在讀本書時,你將被一路帶入一個奇妙的世界—有關ElasticSearch企業搜尋伺服器提供的全文搜尋服務的世界。我們將從對ElasticSearch的總體介紹開始,具體介紹覆蓋了啟動與運行ElasticSearch及如何使用配置檔案和REST API對其進行配置等內容。你還將學到如何創建索引結構並提交給ElasticSearch、如何為欄位配置不同的分析器,以及如何使用內置數據類型。

在本書中還將討論查詢語言,即所謂的Query DSL,它允許用戶創建複雜的查詢並對返回結果進行過濾。除了上面提到的內容,你還將看到如何使用統計功能來計算查詢返回結果的聚集數據。我們還將實現自動補全功能,學會使用ElasticSearch的空間數據處理能力及預期搜尋功能。

最後,本書還將向你展示ElasticSearch管理API的能力,如控制分片部署位置、操縱集群等功能。此外,你還將學到如何處理使用ElasticSearch過程中可能遇到的常見問題。

本書包含的內容

第1章覆蓋了ElasticSearch的安裝和配置、REST API的使用方法、映射配置、路由和索引別名等內容。

第2章討論了Query DSL——基本查詢與複合查詢、過濾、結果排序及使用腳本等內容。

第3章解釋了如何索引非平面數據、如何處理高亮和自動補全,以及如何利用_ttl、_source等內部信息擴展索引結構。

第4章覆蓋了如何影響結果的得分、如何使用同義詞功能,以及處理多語言數據。此外,本章還介紹了如何使用位置感知的查詢及如何檢查文檔被檢索到的原因。

第5章展示了如何索引樹狀結構、使用嵌套對象、處理父子關係、線上更新索引結構、從外部系統獲取數據及利用批量處理加快索引過程等內容。

第6章主要介紹統計功能、相似查詢功能及預期搜尋功能。

第7章主要介紹集群管理API及集群監控。在本章中,你還將找到有關外部外掛程式安裝的信息。

第8章將指引你有效獲取大規模結果集、控制集群再平衡、驗證查詢及使用預熱查詢。

你需要為本書做的準備

本書基於ElasticSearch伺服器0.20.0寫作而成,書中所有的示例和函式都應當在上面生效。此外,你還需要一個可以傳送HTTP請求的命令行工具,如curl,它在絕大部分的作業系統中都有。請注意,本書中所有的示例都使用了提到的curl工具。如果你想要用其他工具,請注意把查詢格式替換為你選擇工具能夠理解的樣式。

此外,一些章節還需要額外的工具,例如ElasticSearch外掛程式或者MongoDB NoSQL資料庫(不過在需要時,書中會明確提到)。

本書面向的讀者

如果你是全文搜尋和ElasticSearch的初學者,本書是非常適合你閱讀的。它將指引你學習ElasticSearch的基礎知識,你還將學到一些高級功能。

如果你知道ElasticSearch並且已經使用過它,你將發現本書很吸引人,因為它為所有功能提供了一個很好的綜述,並且還帶有示例和描述。不過,你可能會遇到一些已經知道的內容。

如果你知道Apache Solr搜尋引擎,這本書還可以用來比較Apache Solr和ElasticSearch的部分功能。這將幫助你判定哪個工具更加適合你的套用案例。

如果你已經知道ElasticSearch的所有細節,並且知道每一個配置參數都是如何工作的,那么這本書絕對不是你想要的!

部分約定

在本書中,你將找到若干種形式的文本,用來區分不同類型的信息。這裡是這些形式的一些例子及其含義解釋。

文本中的代碼關鍵字如下所示:“indices對象包含關於library和map索引的信息。primaries對象包含當前節點之上的所有主分片的信息。”

代碼塊顯示如下:

"store" : {

"size" : "7.6kb",

"size_in_bytes" : 7867,

"throttle_time" : "0s",

"throttle_time_in_millis" : 0

}

當我們期望把你的注意力吸引到代碼塊的某一部分時,相關的行或條目會被加粗顯示。

public class HashCodeSortScriptextends AbstractSearchScript {

private String field = "name";

publicHashCodeSortScript(Map<String, Object>params)

命令行輸入或輸出寫作如下形式:

curl -XPOST 'localhost:9200/_cluster/reroute' -d '{

"commands" : [

{"move" : {"index" : "shop", "shard" : 1, "from_node" : "es_node_one", "to_node" : "es_node_two"}},

{"cancel" : {"index" : "shop", "shard" : 0, "node" : "es_node_one"}}

新的詞條與重要詞語會被加粗顯示。

警告或重要的注釋文字將以加灰底的形式顯示。

提示和技巧看上去是這個樣子的。

相關詞條

熱門詞條

聯絡我們