一. Elasticsearch是一個基於Lucene的實時的分佈式搜索和分析引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。基於RESTful接口java
二. ES中的核心概念node
- 集羣(Cluster): ES是一個分佈式的搜索引擎,通常由多臺物理機組成。這些物理機,經過配置一個相同的cluster name,互相發現,把本身組織成一個集羣。
- 節點(Node):同一個集羣中的一個Elasticearch主機。
- 主分片(Primary shard):索引(下文介紹)的一個物理子集。同一個索引在物理上能夠切多個分片,分佈到不一樣的節點上。分片的實現是Lucene 中的索引。
- 注意:ES中一個索引的分片個數是創建索引時就要指定的,創建後不可再改變。因此開始建一個索引時,就要預計數據規模,將分片的個數分配在一個合理的範圍。
- 副本分片(Replica shard):每一個主分片能夠有一個或者多個副本,個數是用戶本身配置的。ES會盡可能將同一索引的不一樣分片分佈到不一樣的節點上,提升容錯性。對一個索引,只要不是全部shards所在的機器都掛了,就還能用。
- 索引(Index):邏輯概念,一個可檢索的文檔對象的集合。相似與DB中的database概念。同一個集羣中可創建多個索引。好比,生產環境常見的一種方法,對每月產生的數據建索引,以保證單個索引的量級可控。
- 類型(Type):索引的下一級概念,大概至關於數據庫中的table。同一個索引裏能夠包含多個 Type。
- 文檔(Document):即搜索引擎中的文檔概念,也是ES中一個能夠被檢索的基本單位,至關於數據庫中的row,一條記錄。
- 字段(Field):至關於數據庫中的column。ES中,每一個文檔,實際上是以json形式存儲的。而一個文檔能夠被視爲多個字段的集合。好比一篇文章,可能包括了主題、摘要、正文、做者、時間等信息,每一個信息都是一個字段,最後被整合成一個json串,落地到磁盤。
- 映射(Mapping):至關於數據庫中的schema,用來約束字段的類型,不過 Elasticsearch 的 mapping 能夠不顯示地指定、自動根據文檔數據建立。
- Elasticsearch集羣能夠包含多個索引(indices),每個索引能夠包含多個類型(types),每個類型包含多個文檔(documents),而後每一個文檔包含多個字段(Fields),這種面向文檔型的儲存,也算是NoSQL的一種吧。
- ES比傳統關係型數據庫,對一些概念上的理解:
- Relational DB -> Databases -> Tables -> Rows -> Columns
- Elasticsearch -> Indices -> Types -> Documents -> Fields
三 .Elasticsearch 的安裝及配置git
配置文件elasticsearch.yml 集羣名和節點名: #cluster.name: elasticsearch #node.name: "node1" 是否參與master選舉和是否存儲數據 #node.master: true #node.data: true 分片數和副本數 #index.number_of_shards: 5 #index.number_of_replicas: 1github
master選舉最少的節點數,這個必定要設置爲整個集羣節點個數的一半加1,即N/2+1web
#discovery.zen.minimum_master_nodes: 1數據庫
discovery ping的超時時間,擁塞網絡,網絡狀態不佳的狀況下設置高一點json
#discovery.zen.ping.timeout: 3s網絡
注意,分佈式系統整個集羣節點個數N要爲奇數個!!app
如何避免ElasticSearch發生腦裂(brain split):http://blog.trifork.com/2013/10/24/how-to-avoid-the-split-brain-problem-in-elasticsearch/elasticsearch
即便集羣節點個數爲奇數,minimum_master_nodes爲整個集羣節點個數一半加1,也難以免腦裂的發生,詳情看討論:https://github.com/elastic/elasticsearch/issues/2488
四. ElasticSearch之初體驗
在正式使用以前,最好安裝個web圖形界面的插件,咱們使用比較流行的head插件,安裝步驟以下: /elasticsearch-1.7.1/bin/plugin -install mobz/elasticsearch-head ,安裝完畢後的頁面顯示以下:

經過圖形界面能夠查看集羣信息,索引信息,索引狀態,檢索數據等操做。大概有個印象,後面介紹下大概用法,及JavaApi如何使用