溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ElasticSearch之索引模板滾動(dòng)索引怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2023-04-19 15:23:50 來(lái)源:億速云 閱讀:126 作者:iii 欄目:開(kāi)發(fā)技術(shù)

今天小編給大家分享一下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è)置或映射

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 是索引模板的名稱(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ù)。

2 索引模板 Setting

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ò)濾器

3 索引映射 :mapping

  • 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í)刪除??!

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

1 創(chuàng)建滾動(dòng)索引

背景 : 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 做生命周期控制

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

可以通過(guò)控制臺(tái)綁定,也可以通過(guò)接口

ElasticSearch之索引模板滾動(dòng)索引怎么實(shí)現(xiàn)

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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI