Elasticsearch所涉及到的每一項技術都不是創新或者革命性的,全文檢索,分析系統以及分佈式數據庫這些早就已經存在了。它的革命性在於將這些獨立且有用的技術整合成一個一體化的、實時的應用。它對新用戶的門檻很低,固然它也會跟上你技能和需求增加的步伐。-《Elasticsearch權威指南》html
Elasticsearch是面向文檔(document oriented)的,這意味着它能夠存儲整個對象或文檔 (document)。然而它不只僅是存儲,還會索引(index)每一個文檔的內容使之能夠被搜索。在 Elasticsearch中,你能夠對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式與以往徹底不一樣,這也是Elasticsearch可以執行復雜的全文搜索的緣由之 一。 -《Elasticsearch權威指南》node
在數據庫的學習中咱們就知道了索引這個概念,索引是爲提升查詢效率而誕生的。索引讓咱們更快的定位須要查詢的關鍵字。以Mysql來講:[從索引的數據結構劃分]Mysql數據庫中包含FULLTEXT,HASH,BTREE,RTREE這幾種索引,分別是全文索引(全文索引是MyISAM的一個特殊索引類型,主要用於全文檢索),hash索引(只有Memory存儲引擎顯示支持hash索引),B-tree B樹索引(目前大部分數據庫系統及文件系統都採用B-Tree或其變種B+Tree做爲索引結構),R-tree 空間索引(MyISAM支持空間索引,主要用於地理空間數據類型)。sql
全文索引(FULL-TEXT):用於全文檢索(在一個文件中搜索匹配的詞),又被稱爲倒排文檔索引,是現代搜索引擎的關鍵技術。這也是ES的核心側重點,致力於用戶之前所未有的速度檢索和分析大數據。數據庫
一、Mapping:至關於數據庫表的schema,即定義這張表的字段和類型json
二、Index:索引至關於數據庫數據結構
三、Type:至關於數據庫的表app
四、Document:行數據curl
五、Fileds:字段分佈式
六、Id:至關於記錄的編號ide
七、shared:分片,這是ES提供分佈式搜索的基礎,其含義爲將一個完整的index分紅若干部分存儲在相同或不一樣的節點上,這些組成index的部分就叫作shard
一、獲取示例數據:
wget https://download.elastic.co/demos/kibana/gettingstarted/shakespeare.json wget https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip wget https://download.elastic.co/demos/kibana/gettingstarted/logs.jsonl.gz
解壓縮:
unzip accounts.zip gunzip logs.jsonl.gz
二、導入示例數據:隨便選取一個節點導入,這裏爲分佈式環境,單機版同理。
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/shakespeare -d ' {"mappings" : { "_default_" : { "properties" : { "speaker" : {"type": "string", "index" : "not_analyzed" }, "play_name" : {"type": "string", "index" : "not_analyzed" }, "line_id" : { "type" : "integer" }, "speech_number" : { "type" : "integer" } } } } }';
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/logstash-2015.05.18 -d ' {"mappings": { "log": { "properties": { "geo": { "properties": { "coordinates": { "type": "geo_point" } } } } } } }';
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/logstash-2015.05.19 -d ' {"mappings": { "log": { "properties": { "geo": { "properties": { "coordinates": { "type": "geo_point" } } } } } } }';
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/logstash-2015.05.20 -d ' {"mappings": { "log": { "properties": { "geo": { "properties": { "coordinates": { "type": "geo_point" } } } } } } }';
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/_bulk?pretty' --data-binary @shakespeare.json curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/_bulk?pretty' --data-binary @logs.jsonl
三、查看是否導入成功:
curl 'localhost:9200/_cat/indices?v'
一、分佈式環境中只需選取一個節點啓動ES-head,不管是否是Master節點,都能鏈接到整個集羣,這裏選取node-1(192.168.230.150)導入。導入以後從新訪問192.168.230.150:9100查看head界面可獲得以下:
二、全部數據導入後會分片存儲在不一樣的節點上,默認是5個分片,一個副本。每個分片的副本都不會和本體存在一個節點上從而保證一個節點數據丟失可已獲得恢復。咱們能夠修改鏈接的節點:結果同上,說明不管鏈接哪一個節點都能獲取集羣的信息。
三、關閉其中一個節點(這裏關閉node-1,master節點看看會出現什麼結果)
咱們發現集羣健康值由green變爲了yellow,從新選舉了node-3爲主節點Master。咱們從新啓動node-1查看:
node-1節點恢復了,所存儲的數據分片也恢復了,node-3還是Master。
四、ES-head作一個簡單的查詢示例:
ES-head能夠清楚的查看集羣的各類信息,節點,索引,數據。這裏簡單示例一個查詢,具體功能後面在探索。查詢type爲account的數據條件是年齡範圍在10-50之間。
一、開啓Kibana,訪問5601端口:http://ip:5601 建立Index pattern :ba*,log*,sh*(Management->Index Patterns->add New->取消全部選項->Create)
二、Discover數據查詢展現:根據條件過濾選擇要展現的字段右側點擊add,點開數據詳情能夠選擇table和json兩種格式展現。
三、Visualize可視化:多種可選擇圖形可視化。
選擇過濾條件和聚合函數:(buckets:Split Slices->Aggregation->Range->Field->balance-add Range選擇數據的範圍 )
在此基礎上再添加條件:(Add sub-buckets->Split Slices->aggregation ->Terms ->field ->age ->Apply changes運行):
點擊右上角的save保存爲pie-ba-example.
四、dashboard:儀表盤,進行多圖組合展現。
五、Dev Tools:控制檯,能夠發送http請求,用Curl能夠作的請求,在這裏均可以作。只要能和ES的REST API對接,均可以在這裏作。
PUT:
DELETE:
六、Management:管理Index Pattern,Object (建立保存的圖像),系統的一些配置文件能夠進行編輯,略過(暫時尚未細細研究)。
到這裏,EK的安裝和使用的基本介紹就完了。
注意:
咱們在DB中建立數據庫的時候是先配置schema在填寫數據庫的名字而後保存,這樣一個數據庫就建好了,這裏在建立Mapping的時候其中就包含index的命名。其中Json參數包含type也就是表名,以及字段的定義。
Kibana主要作可視化展現,須要將可視化的組件多熟悉,瞭解過濾條件和聚合函數如此才能和業務結合。