ElasticSearch簡介(一)——基礎

基本概念 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。

相關文章
相關標籤/搜索