我想,既然你來看這篇文章了,那麼應該不用告訴你ElasticSearch是用來做什麼的了。
如果你是無意中看了這篇文章,那我也要對你負責。告訴你這篇文章要介紹的對象是誰,它就是ElasticSearch。後面簡稱ES。
一個基於文檔的分佈式搜索分析框架。
當前主流的分佈式框架具有的屬性,它基本上都有,如高性能,高可用。下面我們進入正題,介紹ES中的概念。我們採用MAP的方式來表述。即A:XXX這種。
一、概念梳理
1.Lucene:Lucene可以被認爲是迄今爲止最先進、性能最好的、功能最全的搜索引擎庫。即,目前最屌的搜索庫,只支持java語言,使用複雜。
2.ElasticSearch:簡稱ES,基於Lucene開發得到,是開源的,使用簡單,可拓展。《ElasticSearch權威指南》中如是描述它:
Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。
不過,Elasticsearch不僅僅是Lucene和全文搜索,我們還能這樣去描述它:
- 分佈式的實時文件存儲,每個字段都被索引並可被搜索
- 分佈式的實時分析搜索引擎
- 可以擴展到上百臺服務器,處理PB級結構化或非結構化數據
而且,所有的這些功能被集成到一個服務裏面,你的應用可以通過簡單的RESTful API、各種語言的客戶端甚至命令行與之交互。
上手Elasticsearch非常容易。它提供了許多合理的缺省值,並對初學者隱藏了複雜的搜索引擎理論。它開箱即用(安裝即可使用),只需很少的學習既可在生產環境中使用。
Elasticsearch在Apache 2 license下許可使用,可以免費下載、使用和修改。
3.Kibana:ES的配置管理、ES中數據的可視化分析。官方說他:Kibana爲您的數據提供了圖像,是用於配置和管理Elastic Stack各個方面的可擴展用戶界面。
基礎相關:
4.JSON:全稱爲Javascript對象符號(JavaScript Object Notation),JSON現在已經被大多語言所支持,而且已經成爲NoSQL領域的標準格式。它簡潔、簡單且容易閱讀。
以下使用JSON文檔來表示一個用戶對象:
{
"email": "[email protected]",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
儘管原始的user對象很複雜,但它的結構和對象的含義已經被完整的體現在JSON中了,在Elasticsearch中將對象轉化爲JSON並做索引要比在表結構中做相同的事情簡單的多。
功能相關:
5.document :類比成數據庫中的一行數據(一個元組)
Elasticsearch是面向文檔(document oriented)的,這意味着它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在Elasticsearch中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜索的原因之一。
ELasticsearch使用Javascript對象符號(JavaScript Object Notation),也就是JSON,作爲文檔序列化格式。
6.文檔元數據:包括_index,_type,_id
7.type:文檔代表的對象的類,類比數據庫中的表。表是行的集合,type是文檔(document)的集合。
8.index:文檔存儲的地方,類比一個數據庫。庫是表的集合,index是type的集合。
9.id:文檔的唯一標識
架構相關:
10.主要分片(primary shard):用來存放數據的主本
11.複製分片(replica shard):用來存放數據的副本
二、基礎操作
1.下載ES和Kibana的安裝包。
ES:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.zip
Kibana:https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-windows-x86.zip
2.下載安裝1.8.0_73及以上版本的JDK
自己解決
3.啓動ES和Kibana
點擊解壓後的對應文件夾下的bin目錄下的elasticsearch.bat和kibana.bat
4.進入操作地址,驗證自己是否安裝啓動成功
ES地址:http://localhost:9200/?pretty
可以用來判斷安裝是否成功。
kibana地址:http://localhost:5601
用來操作ES和做數據可視化。
5.查看健康狀況
進入本地的kibana服務主頁
點擊左側導航欄的“Dev Tools”按鈕
在Console框的左側輸入區輸入:
GET _cat/health?v
輸出的內容:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1561536359 16:05:59 elasticsearch yellow 1 1 1 1 0 0 1 0 - 50.0%
6.索引操作
6.1 查看集羣中有哪些索引
GET _cat/indices?v
輸出:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana FmA7KbNYRleEj9L8x_y-FQ 1 1 1 0 6.3kb 3.1kb
6.2 創建索引:
PUT test_index?pretty
輸出:
{
"acknowledged": true,
"shards_acknowledged": true
}
再次查看索引:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana FmA7KbNYRleEj9L8x_y-FQ 1 1 1 0 6.3kb 3.1kb
green open test_index xcNf-RBbR2eFh0whxVgzVw 5 1 0 0 1.2kb 650b
發現多了一條索引信息,沒錯,它就是我們新創建的。
6.3 刪除索引:
DELETE test_index?pretty
輸出:
{
"acknowledged": true
}
7.文檔的增刪改查(CRUD)
7.1創建文檔:
PUT /yourindex/yourtype/yourid
{
json數據
}
輸出:
{
"_index": "yourindex",
"_type": "yourtype",
"_id": "yourid",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
7.2 查詢文檔
GET /yourindex/yourtype/yourid
輸出:
{
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
}
7.3 替換文檔
和創建一個,都使用PUT關鍵字,沒有區別,相當於替換原來的文檔。既然是替換,就是說需要一個完整的文檔數據了。
PUT /yourindex/yourtype/yourid
{
json數據
}
7.4 更新文檔
POST /yourindex/yourtype/yourid/_update
{
"doc":{
"name":"good gaolujie yagao"
}
}
7.5 刪除文檔
DELETE /yourindex/yourtype/yourid