本教程是基於Elasticsearch6.5版本編寫java
下面將介紹、安裝並啓動Elasticsearch,查看其中的內容以及執行索引,搜索和修改數據等基本操做的過程。在本教程結束時,您應該很好地瞭解Elasticsearch是什麼,它是如何工做的,並但願可以得到靈感,看看如何使用它來構建複雜的搜索應用程序或從數據中挖掘智能。node
Elasticsearch是一個高度可擴展的開源全文搜索和分析引擎。Elasticsearch基於Apache Lucene,它容許您快速,近實時地存儲,搜索和分析大量數據。它一般用做與底層引擎/技術,提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口;爲具備複雜搜索功能和要求的應用程序提供支持。 如下是Elasticsearch可用於的一些場景示例:web
有一些概念是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提供了將索引細分爲多個稱爲分片的功能。建立索引時,只需定義所需的分片數便可。每一個分片自己都是一個功能齊全且獨立的「索引」,能夠託管在集羣中的任何節點上。 分片很重要,主要有兩個緣由:服務器
Tips: 每一個Elasticsearch分片都是Lucene索引。單個Lucene索引中能夠包含最大數量的文檔。截止LUCENE-5843,限制是2,147,483,519(= Integer.MAX_VALUE - 128)文檔。您可使用_cat/shardsAPI 監控分片大小。
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的訪問。若有必要,能夠配置此端口。
工具