elasticsearch-head安裝和介紹已在上一篇講了。html
在瀏覽器訪問http://localhost:9100,可看到以下界面,表示啓動成功:node
仔細觀察,咱們會發現客戶端默認鏈接的是咱們elasticsearch的默認路徑。而此時elasticsearch服務未啓動,因此集羣健康值是未鏈接數據庫
集羣健康值的幾種狀態以下:json
綠色,最健康的狀態,表明全部的分片包括備份均可用瀏覽器
黃色,基本的分片可用,可是備份不可用(也多是沒有備份),下文有提到app
紅色,部分的分片可用,代表分片有一部分損壞。此時執行查詢部分數據仍然能夠查到,遇到這種狀況,仍是趕快解決比較好elasticsearch
灰色,未鏈接到elasticsearch服務分佈式
此時,咱們啓動elasticsearch服務,從新刷新瀏覽器,發現集羣健康值變成了黃色,以下:ide
集羣名字:xwj。在配置文件(elasticsearch.yml)中設置 cluster.name:工具
經過上圖能夠看到咱們的節點名稱爲elasticsearch,而且該節點下有兩個索引test_index一、test_index2
在test_index2下,選擇 信息-->索引信息,能夠查看該索引的全部信息,包括mappings、setting等等
在test_index2下,選擇 動做-->關閉/開啓,能夠關閉/開啓該索引,關閉後的索引如圖:
在該界面也能夠模糊查詢索引、設置刷新頻率等操做。以下圖:
幾個查詢
集羣健康:localhost:9200/_cat/health?v
集羣的節點列表:localhost:9200/_cat/nodes?v
查看所有索引:localhost:9200/_cat/indices?v
在這裏,能夠查看到全部的索引,而且還能夠建立一個新的索引,以下圖:
建立結構化索引
上圖建立的索引,點開索引信息,mapping是空的,表示該索引的字段並無指定,咱們能夠在建立索引的時候直接指定其字段名來建立。經過發送http請求來實現。
使用Head的符合查詢 或者postman工具進行創
請求路徑:localhost:9200/book --》ES服務的ip:端口/要建立的索引名,請求方法:PUT
請求體:
{
"settings":{
"number_of_shards":5, //分片數
"number_of_replicas":1 //備份數
},
//映射文件
"mappings":{
//類型名
"novel":{
//文檔的全部字段以及類型
"properties":{
"name":{
"type":"text"
},
"author":{
"type":"keyword"
},
"word_count":{
"type":"integer"
},
"publish_date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd" //日期格式化容許的類型
}
}
}
}
}
關於結構化索引和非結構化索引的區別:
結構化索引,相似MySQL,咱們會對索引結構作預約義,包括字段名,字段類型等;那麼,非結構化索引,就相似Mongo,索引結構未知,根據具體的數據來update索引的mapping。
那麼如何選擇兩種索引呢,仍是跟具體的使用場景有關,結構化相比非結構化,更易優化,性能好些,非結構化相較靈活,只是頻繁update索引mapping會有必定的性能損耗。
重點:須要特別特別注意的是:若是你的索引後期要修改,那麼你只能重建一個你要修改爲的索引,而後將數據複製到新的索引中,代碼以下
POST localhost:9200/_reindex
{
"source": {
"index": "people"
},
"dest": {
"index": "book"
}
}
參考:Elasticsearch index fields 重命名
這裏可看到索引、類型、字段、數據信息,以下圖所示:
集羣(Cluster):
ES是一個分佈式的搜索引擎,通常由多臺物理機組成。這些物理機,經過配置一個相同的cluster name,互相發現,把本身組織成一個集羣。
節點(Node):
同一個集羣中的一個Elasticsearch實例就是一個Node。一個機器能夠有多個實例,因此並不能說一臺機器就是一個node。不過大多數狀況下每一個node運行在一個獨立的環境或虛擬機上。
Node類型:
1)data node: 存儲index數據。Data nodes hold data and perform data related operations such as CRUD, search, and aggregations.
2)client node: 不存儲index,處理轉發客戶端請求到Data Node。
3)master node: 不存儲index,集羣管理,如管理路由信息(routing infomation),判斷node是否available,當有node出現或消失時重定位分片(shards),當有node failure時協調恢復。
(全部的master node會選舉出一個master leader node)
詳情參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
分片(shard):
分片,ES是分佈式搜索引擎,每一個索引有一個或多個分片,索引的數據被分配到各個分片上,至關於一桶水用了N個杯子裝,分片有助於橫向擴展,N個分片會被儘量平均地(rebalance)分配在不一樣的節點上(例如你有2個節點,4個主分片(不考慮備份),那麼每一個節點會分到2個分片,後來你增長了2個節點,那麼你這4個節點上都會有1個分片,這個過程叫relocation,ES感知後自動完成),分片是獨立的,對於一個Search Request的行爲,每一個分片都會執行這個Request.
主分片(Primary shard):
索引(下文介紹)的一個物理子集。同一個索引在物理上能夠切多個分片,分佈到不一樣的節點上。分片的實現是Lucene 中的索引。
注意:ES中一個索引的分片個數是創建索引時就要指定的,創建後不可再改變。因此開始建一個索引時,就要預計數據規模,將分片的個數分配在一個合理的範圍。
副本分片(Replica shard):
能夠理解爲備份分片。每一個主分片能夠有一個或者多個副本,個數是用戶本身配置的。ES會盡可能將同一索引的不一樣分片分佈到不一樣的節點上,提升容錯性。對一個索引,只要不是全部shards所在的機器都掛了,就還能用。主分片和備分片不會出如今同一個節點上(防止單點故障),默認狀況一個索引建立5個分片一個副本(一個副本是指複製一次,有幾個分片複製幾個)(即5 primary+5 replica=10個分片)。若是你只有一個節點,那麼5個replica都沒法分配(unassigned),此時cluster status會變成Yellow。
eg:新建兩個索引testshards和testa,選擇的 分片數和副本數分別爲(5,2)和(1,1),建索引時分片數指 主分片數。
replica的做用主要包括:
1.容災:primary分片丟失,replica分片就會被頂上去成爲新的主分片,同時根據這個新的主分片建立新的replica,集羣數據安然無恙
2.提升查詢性能:replica和primary分片的數據是相同的,因此對於一個query既能夠查主分片也能夠查備分片,在合適的範圍內多個replica性能會更優(但要考慮資源佔用也會提高[cpu/disk/heap]),另外index request只能發生在主分片上,replica不能執行index request。
對於一個索引,除非重建索引不然不能調整分片的數目(主分片數, number_of_shards),但能夠隨時調整replica數(number_of_replicas)。
索引(Index):
邏輯概念,一個可檢索的文檔對象(documents)的集合。相似與DB中的database概念。同一個集羣中可創建多個索引。好比,生產環境常見的一種方法,對每月產生的數據建索引,以保證單個索引的量級可控。
類型(Type):
索引的下一級概念,至關於數據庫中的table。同一個索引裏能夠包含多個 Type。 數據瀏覽tab中,選中某個索引或者類型,均可以看它對應的類型或索引。
文檔(Document):
即搜索引擎中的文檔概念,也是ES中一個能夠被檢索的基本單位,至關於數據庫中的row,一條記錄。
字段(Field):
至關於數據庫中的column。ES中,每一個文檔,實際上是以json形式存儲的。而一個文檔能夠被視爲多個字段的集合。好比一篇文章,可能包括了主題、摘要、正文、做者、時間等信息,每一個信息都是一個字段,最後被整合成一個json串,落地到磁盤。
映射(Mapping):
至關於數據庫中的schema,用來約束字段的類型,不過 Elasticsearch 的 mapping 能夠不顯示地指定、自動根據文檔數據建立。
ES比傳統關係型數據庫,對一些概念上的理解:
Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields
參考:
在這個頁籤,能夠作數據項簡單的查詢(只能作查詢)。
選擇一個索引,而後再選擇不一樣的查詢條件,勾選「顯示查詢語句」,最後點擊搜索,能夠看到具體的查詢json和查詢結果
至於不一樣組合的查詢條件表示的意思 -> ElasticSearch查詢
在這個頁籤,可使用json進行復雜的查詢,也可發送put請求新增及跟新索引,使用delete請求刪除索引等等。如圖所示:
該頁籤的簡單使用 -> ElasticSearch索引文檔的增刪改查
固然也能夠採用postman去執行這些操做 -> ElasticSearch數據導入By Postman