1. 程式人生 > >Elasticsearch入門一:Elasticsearch的基本概念(譯)

Elasticsearch入門一:Elasticsearch的基本概念(譯)

一.Elasticsearch定義

Elasticsearch是一個開源的高度可擴充套件的全文搜尋和分析引擎。它允許您快速、實時的儲存、搜尋和分析大資料。它通常為具有複雜的搜尋特性和需求的應用提供底層引擎或技術。

Elasticsearch可以用於以下的一些場景:

  • 運營一個網上商城,客戶需要在商城中搜索你銷售的產品。在這種情況下,你可以使用Elasticsearch去儲存你的產品目錄和產品,為它們提供搜尋和建議。
  • 收集日誌或事務資料,並且希望分析和挖掘這些資料,以查詢趨勢、統計資料、彙總或異常。在這種情況下,你可以使用Logstash去收集、聚合和轉換你的資料,然後通過Logstash將資料匯入Elasticsearch。一旦將資料匯入Elasticsearch,你可以執行搜尋和聚合來挖掘你感興趣的任何資訊。
  • 您執行一個價格提醒平臺,它允許價格敏感的客戶指定規則,比如:我對某個電子產品感興趣,如果它在一個月內價格低於某個價位,就給我提醒。在這種情況下,您可以提取供應商的價格,將其推入Elasticsearch,並使用其反向搜尋(Percolator)功能,根據客戶查詢匹配價格變動,最終在找到匹配後將訊息推送給客戶。
  • 您有分析/業務智慧需求,並且希望快速調查、分析、視覺化,並針對大量資料(想想數以百萬計或數十億計的記錄)提出專門的問題。在這種情況下,你可以使用Elasticsearch來儲存你的資料,然後使用Kibana來構建自定義儀器表,用來對重要的資料進行視覺化。另外,你可以使用Elasticsearch的聚合功能對資料進行復雜的業務智慧查詢。

二.Elasticsearch基本概念

以下是Elasticsearch的核心,一開始就理解好這些概念將很好的簡化學習過程。

實時(Near Realtime)

Elasticsearch 是一個實時的搜尋平臺。這意味著從索引文件到文件變成可索引的過程僅僅是稍微的延遲(通常一秒鐘)。

叢集(Cluster)

叢集是一個或多個節點(伺服器)的集合,這些節點儲存整個資料並且提供跨所有節點的聯合索引和搜尋功能。一個叢集有唯一的名稱,預設為elasticsearch。如果節點被設定為通過其名稱加入叢集的話,這個名稱就很重要,因為節點只能是叢集的一部分。

確保不要在不同的環境中重用相同的叢集名稱,否則可能會導致節點加入錯誤的叢集。例如,您可以使用logging-dev、logging-stage和logging-prod分別對應開發、測試和生產叢集名稱。

如果一個叢集中只有一個節點,也是有效和合理的。此外,您還可以擁有多個獨立的叢集,每個叢集都有自己獨特的叢集名稱。

節點(Node)

節點是單個伺服器,它是叢集的一部分,用於儲存資料,並參與叢集的索引和搜尋功能。與叢集一樣,節點的名稱預設為在啟動時分配給節點的隨機唯一識別符號(UUID)。如果你不想要預設的名稱,你可以定義為你想要的任意名稱。當你想要知道網路中的哪個服務對應於Elasticsearch群中的哪個節點時,就用該名稱來區分。

通過配置群名稱,節點可以加入特定的叢集。預設情況下,每個節點都被設定為加入一個名為elasticsearch的叢集。

在一個單獨的叢集中,你可以配置任意數量的節點。此外,如果當前網路上沒有任何節點在執行,預設情況下,啟動單個節點將形成一個名為elasticsearch的新單節點叢集。

索引(Index)

索引是具有類似特性的文件集合。例如,你可以有一個客戶資料的索引,一個產品目錄的索引和一個訂單資料的索引。索引的名稱必須是小寫的,此名稱用於在對文件執行索引、搜尋、更新和刪除操作時引用索引。在單個叢集中,你可以設定任意數量的索引。

型別(Type)

注:在6.0.0的版本中已經廢棄掉了。

型別過去是索引的邏輯類別或分割槽,允許您在同一索引中儲存不同型別的文件。比如一個型別用於儲存使用者,另一個型別用於儲存部落格帖子。此型別以後不再使用。

文件(Document)

文件是可以建立索引的基本資訊單元。例如,可以為單個客戶提供一個文件,為單個產品提供一個文件,為單個訂單提供另一個文件。文件用JSON的形式表示,它是網際網路中最普遍的資料交換格式。在索引中,你可以任意數量的文件。請注意,儘管文件在物理上駐留在索引中,但實際上文件必須被索引分配到索引中的型別中。

碎片和副本(Shards & Replicas)

索引可能儲存大量資料,從而超出單個節點的硬體限制。例如,一個包含10億個文件的索引佔用了1TB的磁碟空間,它可能不適合於單個節點的磁碟,或者單個節點提供搜尋請求時效率太慢。

為了解決這個問題,Elasticsearch提供了將索引細分為多個碎片的功能。當您建立索引時,您可以簡單地定義您想要的碎片的數量。每個碎片本身都是一個功能齊全、獨立的“索引”,可以駐留在叢集中的任何節點上。

切分存在的兩大重要原因:

  • 允許水平切分或縮放內容
  • 允許在碎片(可能在多個節點上)之間分發和並行化操作,從而提高效能/吞吐量

碎片如何分佈以及如何將其文件聚合回搜尋請求的機制完全由Elasticsearch管理,對使用者來說是透明的。

在任何時候都可能出現故障的網路/雲環境中,有一個故障轉移機制是非常有用的,強烈建議在碎片/節點離線或因任何原因消失的情況下使用該機制。

為此,Elasticsearch允許您將索引碎片的一個或多個副本複製到所謂的複製碎片中,或簡稱為副本。

複製存在的兩大重要原因:

  • 它提供了在碎片/節點失敗時的高可用性。出於這個原因,需要注意的是,複製碎片從來不與複製它的原始/主碎片在同一個節點上分配
  • 可以擴充套件搜尋量/吞吐量,因為搜尋可以在所有副本上並行執行

總而言之,每個索引可以分成多個碎片。一個索引也可以被複制零次或多次。一旦複製,每個索引將具有主碎片(從原始碎片複製而來的)和複製碎片(主碎片的副本)。

在建立索引時,每個索引可以定義碎片和副本的數量。建立索引之後,還可以隨時動態更改副本的數量。您可以使用_shrink和_split api更改現有索引的碎片數量,但是這不是一項簡單的任務,預先計劃正確的碎片數量是最佳方法。

預設情況下,Elasticsearch中的每個索引分配5個主碎片和1個副本,這意味著如果叢集中至少有兩個節點,那麼索引將有5個主碎片和5個副本碎片(1個完整副本),每個索引總共有10個碎片。

原文地址:

       https://www.elastic.co/guide/en/elasticsearch/reference/5.4/getting-started.html