您好,登錄后才能下訂單哦!
今天小編給大家分享一下ElasticSearch之索引模板滾動(dòng)索引怎么實(shí)現(xiàn)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
在ES中,數(shù)據(jù)存儲(chǔ)在索引中。索引是一種類(lèi)似于數(shù)據(jù)庫(kù)中表的數(shù)據(jù)結(jié)構(gòu),它包含了一系列的文檔,每個(gè)文檔有一個(gè)唯一的標(biāo)識(shí)符,稱(chēng)為文檔ID
通常一個(gè)索引包含 :分片 , 映射, 分析器等多個(gè)部分組成。我們可以通過(guò) API 創(chuàng)建一個(gè)索引 :
PUT /my_index { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "title": { "type": "text" } } } }
建立索引的時(shí)候可以為其配置很多 Setting 和 properties , 這些配置可以幫助我們更好的使用索引。
但是這衍生一個(gè)問(wèn)題 ,如果索引特別多或者需要滾動(dòng)索引的時(shí)候,每一次都需要配置,這個(gè)時(shí)候就需要我們使用索引模板了》》》
作用
索引模板定義了設(shè)置和映射,你可以在創(chuàng)建新索引時(shí)自動(dòng)應(yīng)用。Elasticsearch根據(jù)與索引名稱(chēng)相匹配的索引模式,將模板應(yīng)用于新的索引。
索引模板只在創(chuàng)建索引時(shí)應(yīng)用。對(duì)索引模板的改變不影響現(xiàn)有的索引。在創(chuàng)建索引的API請(qǐng)求中指定的設(shè)置和映射會(huì)覆蓋索引模板中指定的任何設(shè)置或映射
PUT _template/test_template { "order": 0, "index_patterns": [ "test_*" ], "settings": { "index": { // 分片數(shù)量 "number_of_shards": "6", // 刷新間隔 "refresh_interval": "10s" } }, "mappings": { "properties": { "createTime": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, "requestId": { "type": "keyword" }, "title": { "type": "text", // 分詞器 "analyzer": "standard", "fields": { "keyword": { "type": "keyword" } } } } }, "aliases": {} }
在上面的例子中,my_template
是索引模板的名稱(chēng),my_index_*
是新創(chuàng)建的索引的名稱(chēng),number_of_shards
是設(shè)置每個(gè)新索引的分片數(shù),timestamp
是要插入的時(shí)間戳字段。
其他核心的字段 :
template
: 匹配模板名稱(chēng)的模式,可以使用通配符來(lái)匹配多個(gè)模板。
order
: 定義模板的匹配順序。較低的數(shù)字優(yōu)先匹配。
settings
: 指定模板的索引設(shè)置,例如副本數(shù)量、分片數(shù)量和分配策略。
mappings
: 指定模板的索引映射,即文檔類(lèi)型和字段。
aliases
: 定義與索引相關(guān)聯(lián)的別名。
version
: 定義模板的版本號(hào),用于在更新模板時(shí)進(jìn)行沖突檢測(cè)。
index_patterns
: 指定要應(yīng)用模板的索引模式,支持使用通配符指定多個(gè)索引。
composed_of
: 定義其他 _template
API 模板的組合。
priority
: 定義模板的優(yōu)先級(jí)。較高的數(shù)字優(yōu)先匹配。
metadata
: 定義模板的任意元數(shù)據(jù)。
setting 用于定義策略,包括分片,刷新等等 ,它擁有如下核心配置 :
index.number_of_shards:設(shè)置每個(gè)新創(chuàng)建索引的主分片數(shù)量。默認(rèn)為 1
index.number_of_replicas:設(shè)置每個(gè)新創(chuàng)建索引的副本分片數(shù)量。默認(rèn)為 1
index.codec:設(shè)置新創(chuàng)建索引所使用的編解碼器
index.routing.allocation.total_shards_per_node:設(shè)置每個(gè)節(jié)點(diǎn)最多可以容納的主分片和副本分片總數(shù)
index.routing.allocation.require:設(shè)置新創(chuàng)建索引需要符合的節(jié)點(diǎn)篩選條件
index.lifecycle.name:設(shè)置新創(chuàng)建索引要使用的生命周期策略
index.refresh_interval:設(shè)置新創(chuàng)建索引的刷新間隔時(shí)間
index.max_result_window:設(shè)置新創(chuàng)建索引可返回的最大搜索結(jié)果數(shù)
index.mapping.ignore_malformed:設(shè)置是否忽略在文檔中出現(xiàn)的字段映射錯(cuò)誤
index.analysis.analyzer:設(shè)置新創(chuàng)建索引中的分析器
index.analysis.filter:設(shè)置新創(chuàng)建索引中的分析過(guò)濾器
type
:指定字段的數(shù)據(jù)類(lèi)型
index
:指定字段是否索引,可以是 analyzed、not_analyzed、no 或 false
store
:指定字段是否存儲(chǔ),可以是 true 或 false
analyzer
:指定字段分析器的名稱(chēng),可以是內(nèi)置分析器或自定義分析器
search_analyzer
:指定查詢(xún)時(shí)使用的分析器名稱(chēng),可以是內(nèi)置分析器或自定義分析器
normalizer
:指定字段規(guī)范化器的名稱(chēng),用于在查詢(xún)和聚合時(shí)規(guī)范化字段值
copy_to
:指定一個(gè)或多個(gè)字段,將該字段的內(nèi)容復(fù)制到指定的字段中,以便在查詢(xún)和聚合時(shí)使用
fields
:為字段定義多個(gè)屬性,例如不同的分析器、不同的索引設(shè)置等
format
:指定日期類(lèi)型的格式化方式
注意 :還是由于版本的問(wèn)題,導(dǎo)致每個(gè)版本的寫(xiě)法不一樣,可能有的還會(huì)過(guò)時(shí)刪除??!
背景 : ES 記錄業(yè)務(wù)審計(jì)日志,每天生成大量的記錄,導(dǎo)致單個(gè)索引過(guò)大
前置知識(shí)點(diǎn) :
// 索引別名 : 指向一個(gè)或多個(gè)索引的可讀寫(xiě)名稱(chēng),它們可以被用來(lái)代替實(shí)際的索引名稱(chēng) - 幫助實(shí)現(xiàn)索引的無(wú)縫切換,同時(shí)也可以減少修改客戶(hù)端查詢(xún)的需要 - 切換集群,切換測(cè)試時(shí)都可以快速修改 // ES Rollover 特性 - 允許你在索引到達(dá)一定大小或者時(shí)間上限時(shí)自動(dòng)滾動(dòng)到一個(gè)新的索引中 - 新索引可以是一個(gè)完全相同的結(jié)構(gòu),也可以是不同的 - 可以是在同一個(gè) Elasticsearch 集群中的不同節(jié)點(diǎn)上,也可以是在不同的集群上
創(chuàng)建流程 :
S1 : 創(chuàng)建一個(gè)索引模板 , 為模板定義一個(gè) index_patterns
S2 : 創(chuàng)建一個(gè)索引,并且為索引定義一個(gè)別名
S3 : 觸發(fā)索引的滾動(dòng),同時(shí)通過(guò)別名進(jìn)行業(yè)務(wù)操作
// S1 : 創(chuàng)建模板 - 創(chuàng)建 :此處略,創(chuàng)建方式就是上面的模板創(chuàng)建案例 - 查看創(chuàng)建的模板 : GET _template/test_template // S2 : 索引創(chuàng)建過(guò)程 (這里的實(shí)際格式為 <test-{now/d}-000001>) PUT %3Ctest_%7Bnow%2Fd%7D-000001%3E { "aliases": { "test_rollover": { "is_write_index": true } } } GET %3Ctest_%7Bnow%2Fd%7D-000001%3E // S3: 為其觸發(fā)手動(dòng)滾動(dòng)規(guī)則 (此處是有3條文檔則滾動(dòng)一次,此處沒(méi)有數(shù)據(jù),所以無(wú)法滾動(dòng)) POST /test_rollover/_rollover { "conditions": { "max_docs": 3 } } // S4 : 插入文檔 POST /test_rollover/_doc { "businessInfo":"123" } // S5 : 查詢(xún)當(dāng)前文檔數(shù) (這里創(chuàng)建后已經(jīng)有了多條,但是索引只有一個(gè)) GET /test_rollover/_doc/_search POST /test_rollover/_rollover { "conditions": { "max_docs": 3 } } >> 再次觸發(fā)滾動(dòng)后,發(fā)現(xiàn)已經(jīng)創(chuàng)建了新的
核心重點(diǎn)
is_write_index 很重要,他將決定翻滾之后的舊索引是否還能被查詢(xún)到
未配置 :別名會(huì)指向新索引,并從舊索引中移除別名 ,通過(guò)別名無(wú)法查詢(xún)到舊的索引
配置為 true : 別名會(huì)同時(shí)指向新舊索引 , 舊索引上的別名is_write_index會(huì)被設(shè)置為 false,僅可讀
conditions 有哪些
max_docs
: 索引中文檔的最大數(shù)量,超過(guò)該數(shù)量將觸發(fā)rollover
max_age
: 索引的最大存儲(chǔ)時(shí)間,超過(guò)該時(shí)間將觸發(fā)rollover(30d / 12h 等)
max_size
: 索引的最大存儲(chǔ)大小,超過(guò)該大小將觸發(fā)rollover(5gb / 100mb 等)
max_primary_shard_size
: 主分片的最大存儲(chǔ)大小,超過(guò)該大小將觸發(fā)rollover
max_num_segments
: 索引的最大段數(shù),超過(guò)該數(shù)量將觸發(fā)rollover
min_index_age
: 索引的最小存儲(chǔ)時(shí)間,必須等待一段時(shí)間后才能rollover
min_doc_count
: 索引中文檔的最小數(shù)量,必須達(dá)到一定數(shù)量后才能rollover
自動(dòng)化
通過(guò) _rollover 手動(dòng)觸發(fā)
通過(guò) Index Lifecycle Management 做生命周期控制
可以通過(guò)控制臺(tái)綁定,也可以通過(guò)接口
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_docs": 3 } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } } } // 創(chuàng)建模板時(shí)進(jìn)行綁定 "settings": { "lifecycle": { "name": "my_policy", "rollover_alias" : "test_rollover" } }
以上就是“ElasticSearch之索引模板滾動(dòng)索引怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。