環(huán)境:elasticsearch7.8.0
索引模板
通過事先定義好的模板,在創(chuàng)建索引時(shí),如果索引名稱與模版中定義的索引模式匹配那么就會自動應(yīng)用模版中的配置信息。如果有多個(gè)索引模板被匹配,那么會根據(jù)order進(jìn)行優(yōu)先級。
- 語法格式
{
"order": 0, // 模板優(yōu)先級,當(dāng)有多個(gè)模板被匹配那么會根據(jù)這個(gè)order優(yōu)先級。
"index_patterns": "xxx_yyy_*", // 模板匹配的名稱方式,可以使用通配符
"settings": {...}, // 索引設(shè)置
"mAppings": {...}, // 索引中各字段的映射定義
"aliases": {...} // 索引的別名
}
- 創(chuàng)建模板
localhost:9200/_template/t-order-tpl
{
"index_patterns": [
"t-order-*"
],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"_source": {
"enabled": true
},
"properties": {
"sno": {
"type": "keyword"
},
"name": {
"type": "text",
"analyzer": "ik_max_word"
},
"price": {
"type": "double"
},
"created": {
"type": "date"
}
}
}
}
- 查看模板
http://localhost:9200/_cat/templates?v

默認(rèn)order為0。
- 創(chuàng)建索引

body中什么也沒有輸入,查看索引創(chuàng)建情況:

自動應(yīng)用了上面創(chuàng)建的模版。
模板在很多場景下都非常的有用,比如:我們希望每天對系統(tǒng)的日志信息進(jìn)行記錄,每次都去指定這些通用的信息非常麻煩也可能由于疏忽導(dǎo)致錯誤等問題。有個(gè)模版,每次再創(chuàng)建索引的時(shí)候我們只需要指定索引名稱即可。
索引別名
索引別名可以很好地解決多個(gè)不同索引版本的無縫切換,有點(diǎn)數(shù)據(jù)庫中的視圖的意思。操作的時(shí)候是使用的索引別名,實(shí)際在es內(nèi)部會自動轉(zhuǎn)換到真實(shí)的索引上。
- 創(chuàng)建索引別名
方式1、如果在創(chuàng)建索引模板的時(shí)候指定了別名,那么在創(chuàng)建索引的時(shí)候會自動應(yīng)該索引別名。
方式2、通過如下接口。
我們對上面創(chuàng)建的索引創(chuàng)建別名
接口1:
POST http://localhost:9200/t-order-20210513/_alias/order-01
接口2:
POST http://localhost:9200/_aliases
{
"actions" : [
{
"add" : {
"index" : "t-order-20210513",
"alias" : "order-02"
}
}
]
}
或者
批量操作
POST http://localhost:9200/_aliases
{
"actions" : [
{
"add" : {
"index" : "t-order-20210513",
"alias" : "order-03"
}
},
{
"add" : {
"index" : "t-order-20210513",
"alias" : "order-04"
}
}
]
}
查看索引:

- 索引別名進(jìn)行操作

通過別名創(chuàng)建文檔

查詢文檔
- 修改索引別名的指向
POST http://localhost:9200/_aliases
{
"actions" : [
{ "remove" : { "index" : "t-order-20210513", "alias" : "order-01" } },
{ "add" : { "index" : "t-order-202105", "alias" : "order-01" } }
]
}
這樣就會進(jìn)行了別名與索引的無縫切換。
_source字段

_source:默認(rèn)是開啟存儲的,如上面看到的查詢文檔時(shí)返回的就有_source。在有些實(shí)際的業(yè)務(wù)情況下我們是可以通過關(guān)閉_source功能來節(jié)省硬盤空間的。比如,我們只需要通過關(guān)鍵詞查詢出具體文檔對應(yīng)的id即可的時(shí)候我們就可以關(guān)閉_source功能。
總的來說在默認(rèn)的情況下,我們添加一份文檔的時(shí)候會存儲一份原始的文檔信息和一個(gè)倒排索引(倒排索引記錄的就是關(guān)鍵字與原始文檔之間的一個(gè)對應(yīng)關(guān)系,文檔的ID)。
默認(rèn)情況下查詢文檔:

關(guān)閉_source功能:
"mappings": {
"_source": { "enabled": false }, // 是否保存字段的原始值
"properties": {
"name": {
"type": "text"
}
}
}

結(jié)果中已經(jīng)沒有_source。
節(jié)點(diǎn)類型
- 主節(jié)點(diǎn)
#是否能成為主節(jié)點(diǎn)(true:表示具有被選舉成為主節(jié)點(diǎn)的資格)
node.master: true
作用:
- 索引的創(chuàng)建或刪除
- 跟蹤哪些節(jié)點(diǎn)是集群的一部分
- 決定哪些分片分配給相關(guān)的節(jié)點(diǎn)
說明:
默認(rèn)情況下任何一個(gè)集群中的節(jié)點(diǎn)都有可能被選為主節(jié)點(diǎn)。索引數(shù)據(jù)和搜索查詢等操作會占用大量的cpu,內(nèi)存,io資源,為了確保一個(gè)集群的穩(wěn)定,分離主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)是一個(gè)比較好的選擇。雖然主節(jié)點(diǎn)也可以協(xié)調(diào)節(jié)點(diǎn),路由搜索和從客戶端新增數(shù)據(jù)到數(shù)據(jù)節(jié)點(diǎn),但最好不要使用這些專用的主節(jié)點(diǎn)。一個(gè)重要的原則是,盡可能做盡量少的工作。
為了防止數(shù)據(jù)丟失,配置
discovery.zen.minimum_master_nodes設(shè)置是至關(guān)重要的(默認(rèn)為1),每個(gè)主節(jié)點(diǎn)應(yīng)該知道形成一個(gè)集群的最小數(shù)量的主資格節(jié)點(diǎn)的數(shù)量。
解釋如下:
假設(shè)我們有一個(gè)集群。有3個(gè)主資格節(jié)點(diǎn),當(dāng)網(wǎng)絡(luò)發(fā)生故障的時(shí)候,有可能其中一個(gè)節(jié)點(diǎn)不能和其他節(jié)點(diǎn)進(jìn)行通信了。這個(gè)時(shí)候,當(dāng)
discovery.zen.minimum_master_nodes設(shè)置為1的時(shí)候,就會分成兩個(gè)小的獨(dú)立集群,當(dāng)網(wǎng)絡(luò)好的時(shí)候,就會出現(xiàn)數(shù)據(jù)錯誤或者丟失數(shù)據(jù)的情況。當(dāng)discovery.zen.minimum_master_nodes設(shè)置為2的時(shí)候,一個(gè)網(wǎng)絡(luò)中有兩個(gè)主資格節(jié)點(diǎn),可以繼續(xù)工作,另一部分,由于只有一個(gè)主資格節(jié)點(diǎn),則不會形成一個(gè)獨(dú)立的集群,這個(gè)時(shí)候當(dāng)網(wǎng)絡(luò)回復(fù)的時(shí)候,節(jié)點(diǎn)又會從新加入集群。
- 數(shù)據(jù)節(jié)點(diǎn)
#是否能成為主節(jié)點(diǎn)(true:表示具有被選舉成為主節(jié)點(diǎn)的資格)
node.master: false
#數(shù)據(jù)節(jié)點(diǎn)
node.data: true
作用:
- 存儲索引數(shù)據(jù)
- 對文檔進(jìn)行增刪改查,聚合操作
說明:數(shù)據(jù)節(jié)點(diǎn)對磁盤,內(nèi)存,要求比較高最好給機(jī)器更高的配置。
- 協(xié)調(diào)節(jié)點(diǎn)
#是否能成為主節(jié)點(diǎn)(true:表示具有被選舉成為主節(jié)點(diǎn)的資格)
node.master: false
#數(shù)據(jù)節(jié)點(diǎn)
node.data: false
node.ingest: false
都設(shè)置成false就成為了協(xié)調(diào)節(jié)點(diǎn)。
像搜索請求或批量索引請求這樣的請求可能涉及保存在不同數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù)。例如,搜索請求分兩個(gè)階段執(zhí)行,這兩個(gè)階段由接收客戶端請求的協(xié)調(diào)節(jié)點(diǎn)。
在分散階段,協(xié)調(diào)節(jié)點(diǎn)將請求轉(zhuǎn)發(fā)給保存數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)。每個(gè)數(shù)據(jù)節(jié)點(diǎn)在本地執(zhí)行請求,并將其結(jié)果返回給協(xié)調(diào)節(jié)點(diǎn)。
在收集階段,協(xié)調(diào)節(jié)點(diǎn)將每個(gè)數(shù)據(jù)節(jié)點(diǎn)的結(jié)果縮減為單個(gè)全局結(jié)果集。
總結(jié):協(xié)調(diào)節(jié)點(diǎn)就是負(fù)責(zé)接收Client 的請求,包括 REST Client 等。該節(jié)點(diǎn)將請求分發(fā)到合適的節(jié)點(diǎn),最終把結(jié)果匯集到一起。一般來說,每個(gè)節(jié)點(diǎn)默認(rèn)起到了 Coordinating Node 的職責(zé)。
三種節(jié)點(diǎn)類型對機(jī)器要求簡單說明:
master節(jié)點(diǎn):普通服務(wù)器即可(CPU 內(nèi)存 消耗一般)
data 節(jié)點(diǎn):主要是消耗磁盤,內(nèi)存
coordinating 節(jié)點(diǎn):需要有足夠的內(nèi)存和CPU來處理聚集階段。
其它節(jié)點(diǎn)類型及相關(guān)節(jié)點(diǎn)類型說明查看官方文檔:

完畢?。。?/p>