介紹git
Elasticsearch(ES)是一個基於Lucene構建的開源、分佈式、RESTful接口的全文搜索引擎。Elasticsearch仍是一個分佈式文檔數據庫,其中每一個字段都可被索引,並且每一個字段的數據都可被搜索,ES可以橫向擴展至數以百計的服務器存儲以及處理PB級的數據。能夠在極短的時間內存儲、搜索和分析大量的數據。一般做爲具備複雜搜索場景狀況下的核心發動機。程序員
Elasticsearch能作什麼github
/search
頁面,你能夠搜索項目、用戶、issue、pull request,還有代碼。共有40~50
個索引庫,分別用於索引網站須要跟蹤的各類數據。雖然只索引項目的主分支(master),但這個數據量依然巨大,包括20億個索引文檔,30TB的索引文件。Elasticsearch基本概念數據庫
Elasticsearch是一個幾乎實時的搜索平臺。意思是,從索引一個文檔到這個文檔可被搜索只須要一點點的延遲,這個時間通常爲毫秒級。服務器
羣集是一個或多個節點(服務器)的集合, 這些節點共同保存整個數據,並在全部節點上提供聯合索引和搜索功能。一個集羣由一個惟一集羣ID肯定,並指定一個集羣名(默認爲「elasticsearch」)。該集羣名很是重要,由於節點能夠經過這個集羣名加入羣集,一個節點只能是羣集的一部分。網絡
確保在不一樣的環境中不要使用相同的羣集名稱,不然可能會致使鏈接錯誤的羣集節點。例如,你可使用logging-dev、logging-stage、logging-prod分別爲開發、階段產品、生產集羣作記錄。elasticsearch
節點是單個服務器實例,它是羣集的一部分,能夠存儲數據,並參與羣集的索引和搜索功能。就像一個集羣,節點的名稱默認爲一個隨機的通用惟一標識符(UUID),肯定在啓動時分配給該節點。若是不但願默認,能夠定義任何節點名。這個名字對管理很重要,目的是要肯定你的網絡服務器對應於你的ElasticSearch羣集節點。分佈式
咱們能夠經過羣集名配置節點以鏈接特定的羣集。默認狀況下,每一個節點設置加入名爲「elasticSearch」的集羣。這意味着若是你啓動多個節點在網絡上,假設他們能發現彼此都會自動造成和加入一個名爲「elasticsearch」的集羣。工具
在單個羣集中,你能夠擁有儘量多的節點。此外,若是「elasticsearch」在同一個網絡中,沒有其餘節點正在運行,從單個節點的默認狀況下會造成一個新的單節點名爲」elasticsearch」的集羣。網站
索引是具備類似特性的文檔集合。例如,能夠爲客戶數據提供索引,爲產品目錄創建另外一個索引,以及爲訂單數據創建另外一個索引。索引由名稱(必須所有爲小寫)標識,該名稱用於在對其中的文檔執行索引、搜索、更新和刪除操做時引用索引。在單個羣集中,你能夠定義儘量多的索引。
在索引中,能夠定義一個或多個類型。類型是索引的邏輯類別/分區,其語義徹底取決於你。通常來講,類型定義爲具備公共字段集的文檔。例如,假設你運行一個博客平臺,並將全部數據存儲在一個索引中。在這個索引中,你能夠爲用戶數據定義一種類型,爲博客數據定義另外一種類型,以及爲註釋數據定義另外一類型。
文檔是能夠被索引的信息的基本單位。例如,你能夠爲單個客戶提供一個文檔,單個產品提供另外一個文檔,以及單個訂單提供另外一個文檔。本文件的表示形式爲JSON(JavaScript Object Notation)格式,這是一種很是廣泛的互聯網數據交換格式。
在索引/類型中,你能夠存儲儘量多的文檔。請注意,儘管文檔物理駐留在索引中,文檔實際上必須索引或分配到索引中的類型。
索引能夠存儲大量的數據,這些數據可能超過單個節點的硬件限制。例如,十億個文件佔用磁盤空間1TB的單指標可能不適合對單個節點的磁盤或可能太慢服務僅從單個節點的搜索請求。
爲了解決這一問題,Elasticsearch提供細分你的指標分紅多個塊稱爲分片的能力。當你建立一個索引,你能夠簡單地定義你想要的分片數量。每一個分片自己是一個全功能的、獨立的「指數」,能夠託管在集羣中的任何節點。
Shards分片的重要性主要體如今如下兩個特徵:
1.副本爲分片或節點失敗提供了高可用性。爲此,須要注意的是,一個副本的分片不會分配在同一個節點做爲原始的或主分片,副本是從主分片那裏複製過來的。
2.副本容許用戶擴展你的搜索量或吞吐量,由於搜索能夠在全部副本上並行執行。