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