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
,能夠獲得以下結果:
在瀏覽器訪問Kibina,默認地址爲:http://localhost:5601,左側點擊進入Dev Tools界面。執行GET _cluster/health
來查看集羣健康情況。
es提供了一套api,叫作cat api,能夠查看es中各類各樣的數據。
GET /_cat/health?v
(?v表明顯示列頭)
green:每一個索引的primary shard和replica shard都是active狀態的 yellow:每一個索引的primary shard都是active狀態的,可是部分replica shard處於不可用的狀態 red:不是全部索引的primary shard都是active狀態的,部分索引有數據丟失了
GET /_cat/indices?v
PUT /test_index?pretty
執行後查詢索引:
DELETE /test_index?pretty
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" ]
}
複製代碼
GET /ecommerce/product/1
複製代碼
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
複製代碼
POST /ecommerce/product/1/_update
{
"doc": {
"name": "jiaqiangban gaolujie yagao"
}
}
複製代碼
DELETE /ecommerce/product/1
複製代碼