温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ElasticSearch之索引模板滚动索引怎么实现

发布时间:2023-04-19 15:23:50 来源:亿速云 阅读:142 作者:iii 栏目:开发技术

今天小编给大家分享一下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请求中指定的设置和映射会覆盖索引模板中指定的任何设置或映射

1 索引模板的创建

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: 定义模板的任意元数据。

2 索引模板 Setting

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:设置新创建索引中的分析过滤器

3 索引映射 :mapping

  • type:指定字段的数据类型

  • index:指定字段是否索引,可以是 analyzed、not_analyzed、no 或 false

  • store:指定字段是否存储,可以是 true 或 false

  • analyzer:指定字段分析器的名称,可以是内置分析器或自定义分析器

  • search_analyzer:指定查询时使用的分析器名称,可以是内置分析器或自定义分析器

  • normalizer:指定字段规范化器的名称,用于在查询和聚合时规范化字段值

  • copy_to:指定一个或多个字段,将该字段的内容复制到指定的字段中,以便在查询和聚合时使用

  • fields:为字段定义多个属性,例如不同的分析器、不同的索引设置等

  • format:指定日期类型的格式化方式

注意 :还是由于版本的问题,导致每个版本的写法不一样,可能有的还会过时删除!!

业务功能

1 创建滚动索引

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

2 创建和绑定策略

可以通过控制台绑定,也可以通过接口

ElasticSearch之索引模板滚动索引怎么实现

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之索引模板滚动索引怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI