欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ElasticSearch之索引模板滾動索引實現(xiàn)詳解

 更新時間:2023年04月19日 10:40:58   作者:AntBlack  
這篇文章主要為大家介紹了ElasticSearch之索引模板滾動索引實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一. 前言

文章合集 : ?? https://zhannei.baidu.com/cse/site?q=ElasticSearch&click=1&cc=jb51.net&s=&nsid=

Github : ?? github.com/black-ant

CASE 備份 : ?? gitee.com/antblack/ca…

ES 最近有需求涉及到滾動索引方面的概念,但是這一塊一直沒有太系統(tǒng)的了解。這一篇索性把相關(guān)的節(jié)點(diǎn)進(jìn)行深度的學(xué)習(xí)。

針對版本 :ES 7

吐槽一下 : ES 通病,每次更新后會改來改去。你像MySQL , 更新后 SQL 至少不會有什么減少,ES每次更新,就像重做了一下,API變了不說,各種Maven版本還不能互相適配

二. 索引

在ES中,數(shù)據(jù)存儲在索引中。索引是一種類似于數(shù)據(jù)庫中表的數(shù)據(jù)結(jié)構(gòu),它包含了一系列的文檔,每個文檔有一個唯一的標(biāo)識符,稱為文檔ID

通常一個索引包含 :分片 , 映射, 分析器等多個部分組成。我們可以通過 API 創(chuàng)建一個索引 :

PUT /my_index 
{
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
    },
    "mappings": {
        "properties": {
            "title": {
                "type": "text"
            }
        }
    }
}

建立索引的時候可以為其配置很多 Setting 和 properties , 這些配置可以幫助我們更好的使用索引。

但是這衍生一個問題 ,如果索引特別多或者需要滾動索引的時候,每一次都需要配置,這個時候就需要我們使用索引模板了》》》

三. 索引模板

作用

索引模板定義了設(shè)置和映射,你可以在創(chuàng)建新索引時自動應(yīng)用。Elasticsearch根據(jù)與索引名稱相匹配的索引模式,將模板應(yīng)用于新的索引。

索引模板只在創(chuàng)建索引時應(yīng)用。對索引模板的改變不影響現(xiàn)有的索引。在創(chuàng)建索引的API請求中指定的設(shè)置和映射會覆蓋索引模板中指定的任何設(shè)置或映射

3.1 索引模板的創(chuàng)建

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 是索引模板的名稱,my_index_* 是新創(chuàng)建的索引的名稱,number_of_shards 是設(shè)置每個新索引的分片數(shù),timestamp 是要插入的時間戳字段。

其他核心的字段 :

  • template: 匹配模板名稱的模式,可以使用通配符來匹配多個模板。
  • order: 定義模板的匹配順序。較低的數(shù)字優(yōu)先匹配。
  • settings: 指定模板的索引設(shè)置,例如副本數(shù)量、分片數(shù)量和分配策略。
  • mappings: 指定模板的索引映射,即文檔類型和字段。
  • aliases: 定義與索引相關(guān)聯(lián)的別名。
  • version: 定義模板的版本號,用于在更新模板時進(jìn)行沖突檢測。
  • index_patterns: 指定要應(yīng)用模板的索引模式,支持使用通配符指定多個索引。
  • composed_of: 定義其他 _template API 模板的組合。
  • priority: 定義模板的優(yōu)先級。較高的數(shù)字優(yōu)先匹配。
  • metadata: 定義模板的任意元數(shù)據(jù)。

Create or update index template API | Elasticsearch Guide [8.6] | Elastic

3.2 索引模板 Setting

setting 用于定義策略,包括分片,刷新等等 ,它擁有如下核心配置 :

  • index.number_of_shards:設(shè)置每個新創(chuàng)建索引的主分片數(shù)量。默認(rèn)為 1
  • index.number_of_replicas:設(shè)置每個新創(chuàng)建索引的副本分片數(shù)量。默認(rèn)為 1
  • index.codec:設(shè)置新創(chuàng)建索引所使用的編解碼器
  • index.routing.allocation.total_shards_per_node:設(shè)置每個節(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)建索引的刷新間隔時間
  • index.max_result_window:設(shè)置新創(chuàng)建索引可返回的最大搜索結(jié)果數(shù)
  • index.mapping.ignore_malformed:設(shè)置是否忽略在文檔中出現(xiàn)的字段映射錯誤
  • index.analysis.analyzer:設(shè)置新創(chuàng)建索引中的分析器
  • index.analysis.filter:設(shè)置新創(chuàng)建索引中的分析過濾器

3.3 索引映射 :mapping

  • type:指定字段的數(shù)據(jù)類型
  • index:指定字段是否索引,可以是 analyzed、not_analyzed、no 或 false
  • store:指定字段是否存儲,可以是 true 或 false
  • analyzer:指定字段分析器的名稱,可以是內(nèi)置分析器或自定義分析器
  • search_analyzer:指定查詢時使用的分析器名稱,可以是內(nèi)置分析器或自定義分析器
  • normalizer:指定字段規(guī)范化器的名稱,用于在查詢和聚合時規(guī)范化字段值
  • copy_to:指定一個或多個字段,將該字段的內(nèi)容復(fù)制到指定的字段中,以便在查詢和聚合時使用
  • fields:為字段定義多個屬性,例如不同的分析器、不同的索引設(shè)置等
  • format:指定日期類型的格式化方式

注意 :還是由于版本的問題,導(dǎo)致每個版本的寫法不一樣,可能有的還會過時刪除?。?/p>

四. 業(yè)務(wù)功能

4.1 創(chuàng)建滾動索引

背景 : ES 記錄業(yè)務(wù)審計日志,每天生成大量的記錄,導(dǎo)致單個索引過大

前置知識點(diǎn) :

// 索引別名 : 指向一個或多個索引的可讀寫名稱,它們可以被用來代替實際的索引名稱
- 幫助實現(xiàn)索引的無縫切換,同時也可以減少修改客戶端查詢的需要
- 切換集群,切換測試時都可以快速修改

// ES Rollover 特性
- 允許你在索引到達(dá)一定大小或者時間上限時自動滾動到一個新的索引中
- 新索引可以是一個完全相同的結(jié)構(gòu),也可以是不同的
- 可以是在同一個 Elasticsearch 集群中的不同節(jié)點(diǎn)上,也可以是在不同的集群上

創(chuàng)建流程 :

  • S1 : 創(chuàng)建一個索引模板 , 為模板定義一個 index_patterns
  • S2 : 創(chuàng)建一個索引,并且為索引定義一個別名
  • S3 : 觸發(fā)索引的滾動,同時通過別名進(jìn)行業(yè)務(wù)操作
// S1 : 創(chuàng)建模板
- 創(chuàng)建 :此處略,創(chuàng)建方式就是上面的模板創(chuàng)建案例
- 查看創(chuàng)建的模板 : GET _template/test_template
// S2 : 索引創(chuàng)建過程 (這里的實際格式為 <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ā)手動滾動規(guī)則 (此處是有3條文檔則滾動一次,此處沒有數(shù)據(jù),所以無法滾動)
POST /test_rollover/_rollover
{
    "conditions": {
        "max_docs": 3 
    }
}
// S4 : 插入文檔
POST /test_rollover/_doc
{
  "businessInfo":"123"
}
// S5 : 查詢當(dāng)前文檔數(shù) (這里創(chuàng)建后已經(jīng)有了多條,但是索引只有一個)
GET /test_rollover/_doc/_search
POST /test_rollover/_rollover
{
    "conditions": {
        "max_docs": 3 
    }
}
>> 再次觸發(fā)滾動后,發(fā)現(xiàn)已經(jīng)創(chuàng)建了新的

核心重點(diǎn)

  • is_write_index 很重要,他將決定翻滾之后的舊索引是否還能被查詢到
    • 未配置 :別名會指向新索引,并從舊索引中移除別名 ,通過別名無法查詢到舊的索引
    • 配置為 true : 別名會同時指向新舊索引 , 舊索引上的別名is_write_index會被設(shè)置為 false,僅可讀
  • conditions 有哪些
    • max_docs: 索引中文檔的最大數(shù)量,超過該數(shù)量將觸發(fā)rollover
    • max_age: 索引的最大存儲時間,超過該時間將觸發(fā)rollover(30d / 12h 等)
    • max_size: 索引的最大存儲大小,超過該大小將觸發(fā)rollover(5gb / 100mb 等)
    • max_primary_shard_size: 主分片的最大存儲大小,超過該大小將觸發(fā)rollover
    • max_num_segments: 索引的最大段數(shù),超過該數(shù)量將觸發(fā)rollover
    • min_index_age: 索引的最小存儲時間,必須等待一段時間后才能rollover
    • min_doc_count: 索引中文檔的最小數(shù)量,必須達(dá)到一定數(shù)量后才能rollover
  • 自動化
    • 通過 _rollover 手動觸發(fā)
    • 通過 Index Lifecycle Management 做生命周期控制

4.2 創(chuàng)建和綁定策略

可以通過控制臺綁定,也可以通過接口

PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
             "max_docs": 3 
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
// 創(chuàng)建模板時進(jìn)行綁定
"settings": {
    "lifecycle": {
        "name": "my_policy",
        "rollover_alias" : "test_rollover"
      }
}

總結(jié)

ES 這東西真的難受,之前用的好好的版本,換了一個版本啥也用不了,筆記白做,以上記錄不能保證其他版本可用。

ES 索引模板可以幫助我們基于當(dāng)前ES集群的情況和業(yè)務(wù)場景,規(guī)劃出一套性能更優(yōu),場景更符合的配置。

基于滾動索引和策略(不論是腳本調(diào)用或者自動策略),都能實現(xiàn)按計劃滾動索引,避免索引過多。

這東西現(xiàn)在只可意會,不可照抄?。?/p>

以上就是ElasticSearch之索引模板滾動索引實現(xiàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于ElasticSearch索引模板滾動索引的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mybatis?實現(xiàn)多層級collection嵌套

    mybatis?實現(xiàn)多層級collection嵌套

    這篇文章主要介紹了mybatis?實現(xiàn)多層級collection嵌套,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java.lang.NoClassDefFoundError錯誤的原因及解決方法

    java.lang.NoClassDefFoundError錯誤的原因及解決方法

    這篇文章主要給大家介紹了關(guān)于java.lang.NoClassDefFoundError錯誤的原因及解決的相關(guān)資料,java.lang.NoClassDefFoundError是Java虛擬機(jī)在運(yùn)行時無法找到特定類的錯誤,需要的朋友可以參考下
    2023-10-10
  • Java進(jìn)階教程之運(yùn)行時類型識別RTTI機(jī)制

    Java進(jìn)階教程之運(yùn)行時類型識別RTTI機(jī)制

    這篇文章主要介紹了Java進(jìn)階教程之運(yùn)行時類型識別RTTI機(jī)制,在Java運(yùn)行時,RTTI維護(hù)類的相關(guān)信息,比如多態(tài)(polymorphism)就是基于RTTI實現(xiàn)的,需要的朋友可以參考下
    2014-09-09
  • Java面向?qū)ο蠡A(chǔ)教學(xué)(二)

    Java面向?qū)ο蠡A(chǔ)教學(xué)(二)

    這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下,希望可以對你有所幫助
    2021-07-07
  • 最新評論