技.藝.道:elasticsearch概念梳理及基礎操作

我想,既然你來看這篇文章了,那麼應該不用告訴你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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章