前段時間在做ElasticSearch資料分析相關的工作,一直想翻譯ES的官方文件,相當於ES的入門文件吧。
Elasticsearch是一個高度可擴充套件的開源全文搜尋和分析引擎。它允許使用者快速,實時地儲存,搜尋和分析大量資料。ES通常用作為具有複雜的搜尋功能和要求的應用程式提供的底層引擎/技術。
官方提供了幾個示例用例:
- 你執行一個線上網上商店,讓你的客戶能夠搜尋你銷售的產品。在這種情況下,你可以使用Elasticsearch儲存整個產品目錄和庫存,併為其提供搜尋和自動填充建議。
- 你要收集日誌或事務資料,並且你想分析和挖掘此資料以查詢趨勢,統計資訊,摘要或異常。在這種情況下,你可以使用Logstash(Elasticsearch / Logstash / Kibana堆疊的一部分)來收集,聚合和解析資料,然後將Logstash將此資料提供給Elasticsearch。一旦資料在Elasticsearch中,你可以執行搜尋和聚合來挖掘你感興趣的任何資訊。
- 你執行一個價格提醒平臺,讓價格優惠的客戶指定一個規則,如“我有興趣購買一個特定的電子小工具,如果小工具的價格在下個月內任何供應商的價格低於$ X,我想收到通知” 。在這種情況下,你可以檢索供應商價格,推動他們進入彈性搜尋,並使用其反向搜尋(Percolator)功能來匹配價格變動與客戶查詢,並最終一旦發現匹配,將警報給客戶。
- 你有分析/商業智慧需求,並希望快速調查,分析,視覺化和詢問大量資料的特殊問題(考慮數百萬或數十億條記錄)。在這種情況下,你可以使用Elasticsearch儲存資料,然後使用Kibana(Elasticsearch / Logstash / Kibana堆疊的一部分)構建自定義儀表板,以便視覺化對你重要的資料的方面。此外,你可以使用Elasticsearch聚合功能對你的資料執行復雜的商業智慧查詢。
官方文件的其餘部分將引導使用者完成ES的執行過程,並在其中進行檢視,並執行索引,搜尋和修改資料等基本操作。而最後,使用者將瞭解它的工作原理以及和對此的啟發,以瞭解如何使用它來構建複雜的搜尋應用程式或從資料中挖掘智慧。
基本概念
有幾個概念是Elasticsearch的核心。從一開始就理解這些概念將大大有助於緩解學習過程。
近實時(NRT)
Elasticsearch是一個接近實時的搜尋平臺。這意味著從你索引一個文件到該文件可搜尋的時間稍微延遲(通常為1秒)。
叢集
叢集是一個或多個節點(伺服器)的集合,它們共同儲存整個資料,並在所有節點之間提供聯合的索引和搜尋功能。叢集由唯一的名稱標識,預設情況下是“elasticsearch”。此名稱很重要,因為如果節點設定為通過其名稱加入叢集,則節點只能作為叢集的一部分。確保不要在不同環境中重複使用相同的叢集名稱,否則可能會導致節點加入錯誤的叢集。例如,你可以對開發,分段和生產叢集使用logging-dev,logging-stage和logging-prod。請注意,擁有隻有一個節點的叢集是有效和完美的。此外,你還可以擁有多個獨立的群集,每個群集都有自己獨特的群集名稱。
節點
節點是作為叢集一部分的單個伺服器,儲存資料,並參與叢集的索引和搜尋功能。就像一個叢集一樣,一個節點被一個名稱標識,預設情況下是一個隨機的通用唯一識別符號(UUID),它在啟動時分配給節點。如果你不想要預設值,你可以定義所需的任何節點名稱。此名稱對於管理目的很重要,你希望確定網路中的哪些伺服器對應於Elasticsearch叢集中的哪些節點。可以將節點配置為按叢集名稱加入特定叢集。
預設情況下,每個節點都設定為加入名為elasticsearch的群集,這意味著如果你在網路上啟動了多個節點,並且假設它們可以相互發現,則它們將自動形成並加入名為elasticsearch的單個群集。
在單個叢集中,你可以擁有很多你所需所需的節點數。此外,如果沒有其他彈性搜尋節點執行在你的網路上,啟動單個節點將預設形成名為elasticsearch的新的單節點群集。
索引
索引是具有某種相似特徵的文件的集合。例如,你可以擁有客戶資料的索引,產品目錄的一個索引,以及訂單資料的另一個索引。索引由名稱(必須全部為小寫)標識,該名稱用於在針對其中的文件執行索引,搜尋,更新和刪除操作時引用索引。
在單個叢集中,你可以根據需要定義任意多的索引。
型別
在索引中,你可以定義一個或多個型別。型別是索引的邏輯類別/分割槽,其語義完全取決於你。通常,為具有一組公共欄位的文件定義了一種型別。例如,假設你執行一個部落格平臺,並將所有資料儲存在單個索引中。在此索引中,你可以定義使用者資料的型別,部落格資料的另一種型別以及註釋資料的另一種型別。
文件
文件是可以索引的基本資訊單元。例如,你可以擁有單個客戶的文件,單個產品的另一個文件,以及單個訂單的另一個文件。文件以JSON表示,這是一種無處不在的網際網路資料交換格式。在索引/型別中,你可以儲存儘可能多的文件。請注意,雖然文件物理上位於索引中,但實際上文件實際上必須被索引/分配給索引中的型別。
碎片和複製
索引可能潛在地儲存可能超過單個節點的硬體限制的大量資料。例如,佔用1TB磁碟空間的10億個文件的單個索引可能不適合單個節點的磁碟,或者可能太慢,無法單獨從單個節點提供搜尋請求。
為了解決這個問題,Elasticsearch提供了將索引細分為多個稱為碎片的片段的功能。建立索引時,你可以簡單地定義所需的分片數。每個分片本身就是一個全功能且獨立的“索引”,可以在叢集中的任何節點上託管。
分片是重要的兩個主要原因:
- 它允許你水平分割/擴充套件你的內容卷
- 允許你在分片(潛在地在多個節點上)分散和並行操作,從而提高效能/吞吐量
如何將其文件聚合回搜尋請求完全由Elasticsearch管理,對使用者來說對你是透明的。
在可以隨時預期故障的網路/雲環境中,非常有用,並強烈建議使用故障切換機制,以防止分片/節點因為某種原因離線或消失。 為此,Elasticsearch允許你將索引的碎片的一個或多個副本複製到所謂的複製分片,或簡寫為複本。
副本是重要的兩個主要原因:
- 它提供高可用性,以防分片/節點失敗。 因此,重要的是要注意,複製分片從未從與其複製的原始/主分片在同一節點上分配。
- 它允許你擴充套件搜尋量/吞吐量,因為可以對所有副本並行執行搜尋。
總而言之,每個索引可以分成多個分片。 索引也可以被複製為零(意味著沒有副本)或更多次。 一旦複製,每個索引將有 主碎片(複製的原始碎片)和副碎片(主碎片的副本)。 可以在建立索引時為每個索引定義碎片和副本的數量。 建立索引後,你可以隨時動態更改副本數,但不能更改事後的分片數。
預設情況下,Elasticsearch中的每個索引都分配了5個主分片和1個副本,這意味著如果你的叢集中至少有兩個節點,則索引將具有5個主分片和5個複本分片(1個完整副本),總共 每個指數10個碎片
注意:每個彈性搜尋碎片都是Lucene索引。 在一個Lucene索引中可以有最多的文件數量。 從LUCENE-5843起,限制為2,147,483,519(= Integer.MAX_VALUE - 128)文件。 你可以使用_cat / shards API監視分片大小。