Elasticsearch學習筆記(1) -- 環境安裝和簡單CRUD

一、核心概念

  • Near Realtime(NRT):近實時,兩個意思,從寫入數據到數據能夠被搜索到有一個小延遲(大概1秒);基於es執行搜索和分析能夠達到秒級node

  • Cluster:集羣,集羣中有多個節點(Node),其中有一個爲主節點,這個主節點是能夠經過選舉產生的,主從節點是對於集羣內部來講的。es的一個概念就是去中心化,字面上理解就是無中心節點。集羣中有多個節點(node),其中有一個爲主節點,這個主節點是能夠經過選舉產生的,主從節點是對於集羣內部來講的。es的一個概念就是去中心化,字面上理解就是無中心節點。docker

  • Node:節點,集羣中的一個節點,節點也有一個名稱(默認是隨機分配的),節點名稱很重要(在執行運維管理操做的時候),若是直接啓動一堆節點,那麼它們會自動組成一個elasticsearch集羣,固然一個節點也能夠組成一個elasticsearch集羣。json

  • Document&field:文檔,es中的最小數據單元。一個document能夠是一條客戶數據,一條商品分類數據等,一般用JSON數據結構表示,每一個index下的type中,均可以去存儲多個document。一個document裏面有多個field,每一個field就是一個數據字段。bootstrap

    product documentapi

    { "product_id": "1", "product_name": "高露潔牙膏", "product_desc": "高效美白", "category_id": "2", "category_name": "日化用品" }瀏覽器

  • Index:索引,包含一堆有類似結構的文檔數據,好比能夠有一個客戶索引,商品分類索引等,索引有一個名稱。一個index包含不少document,一個index就表明了一類相似的或者相同的document。好比說創建一個product index,商品索引,裏面可能就存放了全部的商品數據(全部的商品document)。bash

  • Type:類型,每一個索引裏均可以有一個或多個type,type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,好比博客系統,有一個索引,能夠定義用戶數據type,博客數據type,評論數據type。服務器

  • shard:單臺機器沒法存儲大量數據,es能夠將一個索引中的數據切分爲多個shard,分佈在多臺服務器上存儲。有了shard就能夠橫向擴展,存儲更多數據,讓搜索和分析等操做分佈到多臺服務器上去執行,提高吞吐量和性能。每一個shard都是一個lucene index。數據結構

  • replica:任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,所以能夠爲每一個shard建立多個replica副本。replica能夠在shard故障時提供備用服務,保證數據不丟失,多個replica還能夠提高搜索操做的吞吐量和性能。運維

二、環境安裝

爲了快速安裝elasticsearch的環境,採用docker-compose來安裝。本次安裝ealsticsearch集羣爲雙節點,爲了查詢方便,安裝kibina。完整腳本以下:

version: '2.2'
services:
 es01:
 image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
 container_name: es01
 environment:
 - node.name=es01
 - discovery.seed_hosts=es02
 - cluster.initial_master_nodes=es01,es02
 - cluster.name=docker-cluster
 - bootstrap.memory_lock=true
 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
 ulimits:
 memlock:
 soft: -1
 hard: -1
 volumes:
 - esdata01:/usr/share/elasticsearch/data
 ports:
 - 9200:9200
 networks:
 - esnet
 es02:
 image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
 container_name: es02
 environment:
 - node.name=es02
 - discovery.seed_hosts=es01
 - cluster.initial_master_nodes=es01,es02
 - cluster.name=docker-cluster
 - bootstrap.memory_lock=true
 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
 ulimits:
 memlock:
 soft: -1
 hard: -1
 volumes:
 - esdata02:/usr/share/elasticsearch/data
 networks:
 - esnet
 kibana:
 image: kibana:7.3.0
 container_name: kibana
 restart: always
 depends_on: 
 - es01
 environment:
 SERVER_NAME: kibana
 ELASTICSEARCH_HOSTS: http://es01:9200 
    #volumes:
    # - ./kibana.yml:/usr/share/kibana/config/kibana.yml
 ports:
 - 5601:5601
 networks:
 - esnet    

volumes:
 esdata01:
 driver: local
 esdata02:
 driver: local

networks:
 esnet:
複製代碼

執行docker-compose up啓動,本地訪問curl http://localhost:9200,能夠獲得以下結果:

image-20190808171026876

在瀏覽器訪問Kibina,默認地址爲:http://localhost:5601,左側點擊進入Dev Tools界面。執行GET _cluster/health來查看集羣健康情況。

image-20190808172540682

三、集羣健康檢查和簡單操做索引

es提供了一套api,叫作cat api,能夠查看es中各類各樣的數據。

3.一、集羣健康情況

GET /_cat/health?v(?v表明顯示列頭)

image-20190808172708184

​ green:每一個索引的primary shard和replica shard都是active狀態的 ​ yellow:每一個索引的primary shard都是active狀態的,可是部分replica shard處於不可用的狀態 ​ red:不是全部索引的primary shard都是active狀態的,部分索引有數據丟失了

3.二、查詢索引

GET /_cat/indices?v

image-20190808172940215

3.三、建立索引

PUT /test_index?pretty

image-20190808173755758

執行後查詢索引:

image-20190808173834279

3.四、刪除索引

DELETE /test_index?pretty

image-20190808173942552

  • 執行後查詢索引:

image-20190808173249504

四、商品的CRUD操做

4.一、新增商品

PUT /index/type/id
{
  "json數據"
}
複製代碼

es會自動創建index和type,不須要提早建立,並且es默認會對document每一個field都創建倒排索引,讓其能夠被搜索

PUT /ecommerce/product/1
{
    "name" : "gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]
}

PUT /ecommerce/product/2
{
    "name" : "jiajieshi yagao",
    "desc" :  "youxiao fangzhu",
    "price" :  25,
    "producer" :      "jiajieshi producer",
    "tags": [ "fangzhu" ]
}

PUT /ecommerce/product/3
{
    "name" : "zhonghua yagao",
    "desc" :  "caoben zhiwu",
    "price" :  40,
    "producer" :      "zhonghua producer",
    "tags": [ "qingxin" ]
}
複製代碼

4.二、獲取商品

GET /ecommerce/product/1
複製代碼

4.三、更新商品

4.3.一、全量更新

PUT /ecommerce/product/1
{
    "name" : "jiaqiangban gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]
}
複製代碼

4.3.二、部分更新

POST /ecommerce/product/1/_update
{
  "doc": {
    "name": "jiaqiangban gaolujie yagao"
  }
}
複製代碼

4.四、刪除商品

DELETE /ecommerce/product/1
複製代碼
相關文章
相關標籤/搜索