Elasticsearch學習教程系列(0)-入門與安裝

本教程是基於Elasticsearch6.5版本編寫java

下面將介紹、安裝並啓動Elasticsearch,查看其中的內容以及執行索引,搜索和修改數據等基本操做的過程。在本教程結束時,您應該很好地瞭解Elasticsearch是什麼,它是如何工做的,並但願可以得到靈感,看看如何使用它來構建複雜的搜索應用程序或從數據中挖掘智能。node

0.1入門簡介

Elasticsearch是一個高度可擴展的開源全文搜索和分析引擎。Elasticsearch基於Apache Lucene,它容許您快速,近實時地存儲,搜索和分析大量數據。它一般用做與底層引擎/技術,提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口;爲具備複雜搜索功能和要求的應用程序提供支持。 如下是Elasticsearch可用於的一些場景示例:web

  • 您運行在線網上商店,容許您的客戶搜索您銷售的產品。在這種狀況下,您可使用Elasticsearch存儲整個產品目錄和庫存,併爲它們提供搜索和自動填充建議。
  • 您但願收集日誌或交易數據,而且但願分析和挖掘此數據以查找趨勢,統計信息,摘要或異常。在這種狀況下,您可使用Logstash(Elasticsearch / Logstash / Kibana堆棧的一部分)來收集,聚合和解析數據,而後讓Logstash將此數據提供給Elasticsearch。一旦數據在Elasticsearch中,您就能夠運行搜索和聚合來挖掘您感興趣的任何信息。
  • 您運行價格警報平臺,容許精通價格的客戶指定一條規則,例如「我有興趣購買特定的電子產品,若是小工具的價格在下個月內從任何供應商降至X美圓如下,我但願收到通知」 。在這種狀況下,您能夠刮取供應商價格,將其推入Elasticsearch並使用其反向搜索(Percolator)功能來匹配價格變更與客戶查詢,並最終在發現匹配後將警報推送給客戶。
  • 您有分析/業務智能需求,並但願快速調查,分析,可視化並詢問有關大量數據的特定問題(想一想數百萬或數十億條記錄)。在這種狀況下,您可使用Elasticsearch存儲數據,而後使用Kibana(Elasticsearch / Logstash / Kibana堆棧的一部分)構建自定義儀表板,以即可視化對您來講重要的數據方面。此外,您可使用Elasticsearch聚合功能針對您的數據執行復雜的商業智能查詢。

0.2基本概念

有一些概念是Elasticsearch的核心。從一開始就理解這些概念將極大地幫助簡化學習過程。 1.近實時(NRT) Elasticsearch是一個近實時搜索平臺。這意味着從索引文檔到可搜索文檔的時間有一點延遲(一般是一秒)。 2.集羣(cluster) 集羣是一個或多個節點(服務器)的集合,它們共同保存您的整個數據,並提供跨全部節點的聯合索引和搜索功能。羣集由惟一名稱標識,默認狀況下爲「elasticsearch」。此名稱很重要,由於若是節點設置爲按名稱加入羣集,則該節點只能是羣集的一部分。確保不要在不一樣的環境中重用相同的羣集名稱,不然最終會致使節點加入錯誤的羣集。例如,您可使用logging-dev,logging-stage以及logging-prod 用於開發,登臺和生產集羣。請注意,若是羣集中只有一個節點,那麼它是徹底正常的。此外,您還能夠擁有多個獨立的集羣,每一個集羣都有本身惟一的集羣名稱。 3.節點(node) 節點是做爲羣集一部分的單個服務器,存儲數據並參與羣集的索引和搜索功能。就像集羣同樣,節點由名稱標識,默認狀況下,該名稱是在啓動時分配給節點的隨機通用惟一標識符(UUID)。若是不須要默認值,能夠定義所需的任何節點名稱。此名稱對於管理目的很是重要,您能夠在其中識別網絡中哪些服務器與Elasticsearch集羣中的哪些節點相對應。能夠將節點配置爲按羣集名稱加入特定羣集。默認狀況下,每一個節點都設置爲加入一個名爲cluster的集羣elasticsearch,這意味着若是您在網絡上啓動了許多節點而且假設它們能夠相互發現 - 它們將自動造成並加入一個名爲的集羣elasticsearch。在單個羣集中,您能夠擁有任意數量的節點。此外,若是您的網絡上當前沒有其餘Elasticsearch節點正在運行,則默認狀況下啓動單個節點將造成一個名爲的新單節點集羣elasticsearch。 4.索引(index) 索引是具備某些相似特徵的文檔集合。例如,您能夠擁有客戶數據的索引,產品目錄的另外一個索引以及訂單數據的另外一個索引。索引由名稱標識(必須所有小寫),此名稱用於在對其中的文檔執行索引,搜索,更新和刪除操做時引用索引。在單個羣集中,您能夠根據須要定義任意數量的索引。 5.文檔(document) 文檔是能夠編制索引的基本信息單元。例如,您能夠爲單個客戶提供文檔,爲單個產品提供另外一個文檔,爲單個訂單提供另外一個文檔。該文檔以JSON(JavaScript Object Notation)表示,JSON是一種廣泛存在的互聯網數據交換格式。在索引/類型中,您能夠根據須要存儲任意數量的文檔。請注意,儘管文檔實際上駐留在索引中,但實際上必須將文檔編入索引/分配給索引中的類型。 6.分片和副本(Shards & Replicas) 索引可能存儲大量可能超過單個節點的硬件限制的數據。例如,佔用1TB磁盤空間的十億個文檔的單個索引可能不適合單個節點的磁盤,或者可能太慢而沒法單獨從單個節點提供搜索請求。爲了解決這個問題,Elasticsearch提供了將索引細分爲多個稱爲分片的功能。建立索引時,只需定義所需的分片數便可。每一個分片自己都是一個功能齊全且獨立的「索引」,能夠託管在集羣中的任何節點上。 分片很重要,主要有兩個緣由:服務器

  • 它容許您水平拆分/縮放內容量
  • 它容許您跨分片(可能在多個節點上)分佈和並行化操做,從而提升性能/吞吐量 分片的分佈方式以及如何將其文檔聚合回搜索請求的機制徹底由Elasticsearch管理,對用戶而言是透明的。在能夠隨時發生故障的網絡/雲環境中,很是有用,強烈建議使用故障轉移機制,以防分片/節點以某種方式脫機或因任何緣由消失。爲此,Elasticsearch容許您將索引的分片的一個或多個副本製做成所謂的副本分片或簡稱副本。 複製很重要,主要有兩個緣由:
  • 它在碎片/節點發生故障時提供高可用性。所以,請務必注意,副本分片永遠不會在與從中複製的原始/主分片相同的節點上分配。
  • 它容許您擴展搜索量/吞吐量,由於能夠在全部副本上並行執行搜索。 總而言之,每一個索引能夠拆分爲多個分片。索引也能夠複製爲零(表示沒有副本)或更屢次。複製後,每一個索引都將具備主分片(從中複製的原始分片)和副本分片(主分片的副本)。能夠在建立索引時爲每一個索引定義分片和副本的數量。建立索引後,您還能夠隨時動態更改副本數。您可使用_shrink和_splitAPI 更改現有索引的分片數,但這不是一項簡單的任務,而且預先計劃正確數量的分片是最佳方法。默認狀況下,Elasticsearch中的每一個索引都分配了5個主分片和1個副本,這意味着若是羣集中至少有兩個節點,則索引將包含5個主分片和另外5個副本分片(1個完整副本),總計爲每一個索引10個分片。 Tips: 每一個Elasticsearch分片都是Lucene索引。單個Lucene索引中能夠包含最大數量的文檔。截止LUCENE-5843,限制是2,147,483,519(= Integer.MAX_VALUE - 128)文檔。您可使用_cat/shardsAPI 監控分片大小。

0.3安裝

Elasticsearch是基於Java開發的,所以安裝時,須要JDK環境。咱們安裝的版本是Elasticsearch6.5.4,至少須要JDK 8。咱們假設您已經在您的Linux(例如CentOS6.5)環境下已經安裝了JDK。網絡

[builder@master ~]$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
複製代碼

下載安裝包,並解壓:elasticsearch

[builder@master ~]$ cd ~
[builder@master ~]$ mdkir env
[builder@master ~]$ cd env
[builder@master ~]$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
 #等待下載完成後,解壓
[builder@master ~]$ tar -zxvf elasticsearch-6.5.4.tar.gz
[builder@master ~]$ cd elasticsearch-6.5.4
# 在elasticsearch命令後加 -d 參數,是指以守護線程啓動程序,便是後臺運行
[builder@master ~]$ ./bin/elasticsearch -d
複製代碼

到這裏Elasticsearch的安裝已經完成了,是否是很是簡單呢? 另外,咱們啓動的時候是能夠經過 -E 參數指定集羣名稱(cluster.name)或者節點名稱(node.name)的:分佈式

[builder@master ~]$ ./bin/elasticsearch -Ecluster.name=esCluster -Enode.name=builder01  -d
複製代碼

Tips: 默認狀況下,Elasticsearch使用port 9200來提供對其REST API的訪問。若有必要,能夠配置此端口。工具

相關文章
相關標籤/搜索