基本概念 node
1. Node 與 Cluster 數據庫
Elastic 本質上是一個分佈式數據庫,容許多臺服務器協同工做,每臺服務器能夠運行多個 Elastic 實例。服務器
單個 Elastic 實例稱爲一個節點(node)。一組節點構成一個集羣(cluster)。curl
2. Index 分佈式
Elastic 會索引全部字段,通過處理後寫入一個反向索引(Inverted Index)。查找數據的時候,直接查找該索引。url
因此,Elastic 數據管理的頂層單位就叫作 Index(索引)。它是單個數據庫的同義詞。每一個 Index (即數據庫)的名字必須是小寫。spa
下面的命令能夠查看當前節點的全部 Index。對象
$ curl -X GET 'http://localhost:9200/_cat/indices?v'索引
3. Document 開發
Index 裏面單條的記錄稱爲 Document(文檔)。許多條 Document 構成了一個 Index。
Document 使用 JSON 格式表示,下面是一個例子。
{
"user": "張三",
"title": "工程師",
"desc": "數據庫管理"
}
同一個 Index 裏面的 Document,不要求有相同的結構(scheme),可是最好保持相同,這樣有利於提升搜索效率。
Index操做
新建 Index,能夠直接向 Elastic 服務器發出 PUT 請求。下面的例子是新建一個名叫weather的 Index。
$ curl -X PUT 'localhost:9200/weather'
服務器返回一個 JSON 對象,裏面的acknowledged字段表示操做成功。
{
"acknowledged":true,
"shards_acknowledged":true
}
而後,咱們發出 DELETE 請求,刪除這個 Index。
$ curl -X DELETE 'localhost:9200/weather'
數據操做
1. 新增記錄
向指定的 /Index/Type 發送 PUT 請求,就能夠在 Index 裏面新增一條記錄。好比,向/accounts/person發送請求,就能夠新增一條人員記錄。
PUT /accounts/_doc/1
{
"user": "張三",
"title": "工程師",
"desc": "數據庫管理"
}
服務器返回的 JSON 對象,會給出 Index、Id、Version 等信息。
{
"_index": "accounts",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
若是你仔細看,會發現請求路徑是/accounts/person/1,最後的1是該條記錄的 Id。它不必定是數字,任意字符串(好比abc)均可以。
注意,若是沒有先建立 Index(這個例子是accounts),直接執行上面的命令,Elastic 也不會報錯,而是直接生成指定的 Index。因此,打字的時候要當心,不要寫錯 Index 的名稱。
2. 查看記錄
向/Index/Type/Id發出 GET 請求,就能夠查看這條記錄。
GET /accounts/_doc/1
上面代碼請求查看/accounts/1這條記錄,URL 的參數pretty=true表示以易讀的格式返回。
返回的數據中,found字段表示查詢成功,_source字段返回原始記錄。
{
"_index": "accounts",
"_type": "_doc",
"_id": "1",
"_version": 5,
"_seq_no": 4,
"_primary_term": 1,
"found": true,
"_source": {
"user": "張三",
"title": "工程師",
"desc": "數據庫管理"
}
}
若是 Id 不正確,就查不到數據,found字段就是false。
$ curl 'localhost: 9200/weather/beijing/abc?pretty=true'
{
"_index": "accounts",
"_type": "_doc",
"_id": "100",
"found": false
}
也能只查詢內容:
GET /accounts/_source/1
{
"user": "張三",
"title": "工程師",
"desc": "數據庫管理,軟件開發"
}
3. 刪除記錄
刪除記錄就是發出 DELETE 請求。
DELETE /accounts/_doc/2
這裏先不要刪除這條記錄,後面還要用到。
4. 更新記錄
更新記錄就是使用 PUT 請求,從新發送一次數據。
PUT /accounts/_doc/1
{
"user": "張三",
"title": "工程師",
"desc": "數據庫管理,軟件開發"
}
{
"_index": "accounts",
"_type": "_doc",
"_id": "1",
"_version": 6,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 1
}
上面代碼中,咱們將原始數據從"數據庫管理"改爲"數據庫管理,軟件開發"。 返回結果裏面,有幾個字段發生了變化。
"_version" : 6,
"result" : "updated",
能夠看到,記錄的 Id 沒變,可是版本(version)從1變成2,操做類型(result)從created變成updated。