Elasticsearch是什么苍匆?
????Elasticsearch(簡稱ES)是一個基于Apache Lucene 的開源搜索引擎。Lucene是一個庫祝钢,想要發(fā)揮其強大的作用冷冗,你需使用Java并要將其集成到你的應用中。Lucene本身非常復雜锁蠕,你需要深入的了解檢索相關知識來理解它是如何工作的夷野。?
????Elasticsearch也是使用Java編寫并使用Lucene來建立索引并實現(xiàn)搜索功能,但是它的目的是通過簡單連貫的RESTful API讓全文搜索變得簡單并隱藏Lucene的復雜性荣倾。
Elasticsearch有幾個核心概念:
(1) 接近實時(NRT):是一個接近實時的搜索平臺悯搔。
(2)集群(cluster):一個集群就是由一個或多個節(jié)點組織在一起,共同持有你整個的數(shù)據(jù)舌仍,并一起提供索引和搜索功能妒貌。一個集群由一個唯一的名字標識通危。
(3)節(jié)點(node):? 一個節(jié)點是你集群中的一個服務器,是集群的一部分灌曙,存儲你的數(shù)據(jù)菊碟,參與集群的索引和搜索功能。一個節(jié)點可以通過配置集群名稱的方式來加入一個指定的集群在刺。
(4)索引(index):索引是文檔的集合框沟,集群里面可以有多個索引,每個索引有很多不同的文檔增炭,每個索引的里面的字段忍燥,數(shù)據(jù)結構可能不同的。一個索引由一個名字來標識(必須全部是小寫字母的)隙姿,并且當我們要對對應于這個索引中的文檔進行索引梅垄、搜索、更新和刪除的時候输玷,都要使用到這個名字队丝。索引類似于關系型數(shù)據(jù)庫中Database的概念。
(5) 類型(type):在一個索引中欲鹏,你可以定義一種或多種類型机久。類型類似于關系型數(shù)據(jù)庫中Table的概念。es 6.0以上的版本一個索引是沒有多個type了赔嚎,只有一個type膘盖。
(6)文檔(document):文檔是 es 的基本單元,一個索引下可以有很多文檔尤误。文檔以JSON(Javascript Object Notation)格式來表示侠畔。
(7) 分片和副本(shards & replicas):一個索引可以存儲超出單個節(jié)點硬件限制的大量數(shù)據(jù)。比如损晤,一個具有上億文檔的索引占據(jù)1TB的磁盤空間软棺,而任一個節(jié)點都沒有這樣大的磁盤空間;單個節(jié)點處理搜索請求尤勋,響應太慢喘落。
為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能力最冰,這些份就叫做分片瘦棋。當你創(chuàng)建一個索引的時候,你可以指定你想要的分片的數(shù)量锌奴。每個分片本身也是一個功能完善并且獨立的“索引”兽狭,這個“索引”可以被放置到集群中的任何節(jié)點上憾股。
分片之所以重要鹿蜀,主要有兩方面的原因:允許你水平分割/擴展你的內容容量箕慧;允許你在分片(潛在地,位于多個節(jié)點上)之上進行分布式的茴恰、并行的操作颠焦,進而提高性能/吞吐量。
副本:在分片/節(jié)點失敗的情況下往枣,提供了高可用性伐庭,擴展你的搜索量/吞吐量。每個索引可以被分成多個分片分冈,即為主分片圾另,也可以有多個副本。主分片是在索引創(chuàng)建的時候設置雕沉,索引創(chuàng)建后不能修改主分片的數(shù)量集乔,副本的數(shù)量任何時候都可以修改。
默認情況下坡椒,Elasticsearch中的每個索引被分片5個主分片和1個副本扰路,索引創(chuàng)建的時候,如果你的集群中至少有兩個節(jié)點倔叼,你的索引將會有5個主分片和另外5個副本汗唱,這樣的話每個索引總共就有10個分片。一個索引的多個分片可以存放在集群中的一臺主機上丈攒,也可以存放在多臺主機上哩罪,這取決于你的集群機器數(shù)量。主分片和副本的具體位置是由ES內在的策略所決定的巡验。