这是一个系列文章的第三篇文章。之前的两篇文章如下:

  • Elasticsearch:Data streams(一)

  • Elasticsearch:Data streams(二)

在今天的文章中,我将详述如何修改 data strram 的 mappings 以及它的设置。

每个数据流都有一个匹配的索引模板。 此模板中的映射和索引设置应用于为流创建的新后备索引。 这包括流的第一个后备索引,它是在创建流时自动生成的。

在创建数据流之前,我们建议你仔细考虑要在此模板中包含哪些映射(mappings)和设置(settings)。如果你以后需要更改数据流的映射或设置,你有几个选择:

  • 向数据流添加新的字段映射
  • 更改数据流中的现有字段映射
  • 更改数据流的动态索引设置
  • 更改数据流的静态索引设置

提示:如果你的更改包括对现有字段映射或静态索引设置的修改,则通常需要重建索引以将更改应用到数据流的后备索引。 如果你已经在执行重新索引(reindex),则可以使用相同的过程来添加新的字段映射和更改动态索引设置。 请参阅使用重建索引更改映射或设置。

添加一个新的字段映射到数据流

要将新字段的映射添加到数据流,请执行以下步骤:

1)更新数据流使用的索引模板。 这确保新的字段映射被添加到为流创建的未来支持索引中。

例如,my-index-template 是 my-data-stream 使用的现有索引模板。

以下创建或更新索引模板请求将新字段消息的映射添加到模板。

PUT /_index_template/my-index-template
{"index_patterns": [ "my-data-stream*" ],"data_stream": { },"priority": 500,"template": {"mappings": {"properties": {"message": {                              "type": "text"}}}}
}

在上面,我添加了一个新的 message 字段到 mappings。

2)使用更新映射 API 将新的字段映射添加到数据流中。 默认情况下,这会将映射添加到流的现有后备索引(backing indices),包括写入索引(write index)。

以下更新映射 API 请求将新消息字段映射添加到 my-data-stream。

PUT /my-data-stream/_mapping
{"properties": {"message": {"type": "text"}}
}

要仅将映射添加到流的写入索引,请将更新映射 API 的 write_index_only 查询参数设置为 true。

以下更新映射请求仅将新消息字段映射添加到 my-data-stream 的写入索引。 新字段映射不会添加到流的其他支持索引中。

PUT /my-data-stream/_mapping?write_index_only=true
{"properties": {"message": {"type": "text"}}
}

更改数据流中的现有字段映射

每个映射参数的文档指示你是否可以使用更新映射 API 为现有字段更新它。 要更新现有字段的这些参数,请执行以下步骤:

更新数据流使用的索引模板。 这确保将更新的字段映射添加到为流创建的未来后备索引中。

例如,my-index-template 是 my-data-stream 使用的现有索引模板。

以下创建或更新索引模板请求将 host.ip 字段的 ignore_malformed 映射参数的参数更改为 true。

PUT /_index_template/my-index-template
{"index_patterns": [ "my-data-stream*" ],"data_stream": { },"priority": 500,"template": {"mappings": {"properties": {"host": {"properties": {"ip": {"type": "ip","ignore_malformed": true            }}}}}}
}

要仅将映射更改应用于流的写入索引,请将放置映射 API 的 write_index_only 查询参数设置为 true。

以下更新映射请求仅为 my-data-stream 的写入索引更改 host.ip 字段的映射。 该更改不适用于流的其他后备索引。

PUT /my-data-stream/_mapping?write_index_only=true
{"properties": {"host": {"properties": {"ip": {"type": "ip","ignore_malformed": true}}}}
}

除了支持的映射参数外,我们不建议你更改现有字段的映射或字段数据类型,即使在数据流的匹配索引模板或其支持索引中也是如此。 更改现有字段的映射可能会使任何已编制索引的数据无效。

如果你需要更改现有字段的映射,请创建一个新的数据流并将你的数据重新索引到其中。请参阅下面的重建索引更改映射或设置。

更改数据流的动态索引设置

要更改数据流的动态索引设置,请执行以下步骤:

1)更新数据流使用的索引模板。 这确保该设置应用于为流创建的未来后备索引。

例如,my-index-template 是 my-data-stream 使用的现有索引模板。

以下创建或更新索引模板请求将模板的 index.refresh_interval 索引设置更改为 30s(30 秒)。

PUT /_index_template/my-index-template
{"index_patterns": [ "my-data-stream*" ],"data_stream": { },"priority": 500,"template": {"settings": {"index.refresh_interval": "30s"             }}
}

在上面,将 index.refresh_interval 设置更改为 30s(30 秒)。

2)使用更新索引设置 API 更新数据流的索引设置。 默认情况下,这会将设置应用于流的现有后备索引,包括写入索引。

以下更新索引设置 API 请求更新 my-data-stream 的 index.refresh_interval 设置。

PUT /my-data-stream/_settings
{"index": {"refresh_interval": "30s"}
}

重要:要更改 index.lifecycle.name 设置,首先使用删除策略 API 删除现有的 ILM 策略。 请参阅 Switch 生命周期策略。

更改数据流的静态索引设置

静态索引设置只能在创建后备索引时设置。 你不能使用更新索引设置 API更新静态索引设置。

要将新的静态设置应用于未来的后备索引,请更新数据流使用的索引模板。 该设置会自动应用于更新后创建的任何后备索引。

例如,my-index-template 是 my-data-stream 使用的现有索引模板。

以下创建或更新索引模板 API 请求将新的 sort.field 和 sort.order 索引设置添加到模板

PUT /_index_template/my-data-stream-template
{"index_patterns": [ "my-data-stream*" ],"data_stream": { },"priority": 500,"template": {"settings": {"sort.field": [ "@timestamp"],             "sort.order": [ "desc"]                    }}
}

在上面,我们做了如下的操作:

  • 添加 sort.field 索引设置。
  • 添加 sort.order 索引设置。

如果需要,你可以滚动数据流以立即将设置应用到数据流的写入索引。 这会影响翻转后添加到流中的任何新数据。 但是,它不会影响数据流的现有后备索引或现有数据。

要将静态设置更改应用于现有的后备索引,你必须创建一个新的数据流并将你的数据重新索引到其中。 这个在下面讲到。

使用 reindex 更改映射或设置

你可以使用重新索引(reindex)来更改数据流的映射或设置。这通常需要更改现有字段的数据类型或更新后备索引的静态索引设置。

要重新索引数据流,首先创建或更新索引模板,使其包含所需的映射或设置更改。然后,你可以将现有数据流重新索引到与模板匹配的新流中。这会将模板中的映射和设置更改应用于添加到新数据流的每个文档和后备索引。这些更改还会影响新流创建的任何未来后备索引。

按着这些次序:

1)为新数据流选择名称或索引模式。这个新数据流将包含来自现有流的数据。

2)你可以使用 resolve index API 来检查名称或模式是否与任何现有索引、别名或数据流匹配。如果是这样,你应该考虑使用其他名称或模式。

以下解析索引 API 请求检查以 new-data-stream 开头的任何现有索引、别名或数据流。如果不是,可以使用 new-data-stream* 索引模式来创建新的数据流。

GET /_resolve/index/new-data-stream*

API 返回以下响应,指示没有现有目标匹配此模式

{"indices": [ ],"aliases": [ ],"data_streams": [ ]
}

2)创建或更新索引模板。 此模板应包含你要应用于新数据流的后备索引的映射和设置。

该索引模板必须满足数据流模板的要求。 它还应包含你之前在 index_patterns 属性中选择的名称或索引模式。

提示:如果你只是添加或更改一些内容,我们建议你通过复制现有模板并根据需要进行修改来创建一个新模板。

例如,my-index-template 是 my-data-stream 使用的现有索引模板。

以下创建或更新索引模板 API 请求创建一个新的索引模板,new-data-stream-template。 new-data-stream-template 以 my-data-stream-template 为基础,有以下变化:

  • index_patterns 中的索引模式匹配任何以 new-data-stream 开头的索引或数据流。
  • @timestamp 字段映射使用 date_nanos 字段数据类型而不是日期数据类型。
  • 该模板包括 sort.field 和 sort.order 索引设置,这些设置不在原始 my-index-template 模板中。
PUT /_index_template/new-data-stream-template
{"index_patterns": [ "new-data-stream*" ],"data_stream": { },"priority": 500,"template": {"mappings": {"properties": {"@timestamp": {"type": "date_nanos"                 }}},"settings": {"sort.field": [ "@timestamp"],          "sort.order": [ "desc"]                 }}
}

在上面,我们做了如下的操作:

  • 将 @timestamp 字段映射更改为 date_nanos 字段数据类型。
  • 添加 sort.field 索引设置。
  • 添加 sort.order 索引设置。

3)使用创建数据流 API 手动创建新数据流。 数据流的名称必须与新模板的 index_patterns 属性中定义的索引模式相匹配。

我们不建议索引新数据来创建此数据流。 稍后,你会将现有数据流中的旧数据重新索引到这个新流中。 这可能会导致一个或多个支持索引包含新旧数据的混合

重要在数据流中混合新旧数据
虽然混合新旧数据是安全的,但它可能会干扰数据保留。 如果删除旧索引,则可能会意外删除包含新旧数据的后备索引。 为了防止过早的数据丢失,你需要保留这样的后备索引,直到你准备好删除其最新数据。

以下创建数据流 API 请求以 new-data-stream 为目标,它与 new-data-stream-template 的索引模式相匹配。 因为没有现有索引或数据流使用此名称,所以此请求创建新数据流数据流。

PUT /_data_stream/new-data-stream

4)如果你不想在新数据流中混合新旧数据,请暂停新文档的索引。 虽然混合新旧数据是安全的,但它可能会干扰数据保留。

5)如果你使用 ILM 自动滚动,请减少 ILM 轮询间隔。 这确保当前写入索引在等待滚动检查时不会增长太大。 默认情况下,ILM 每 10 分钟检查一次翻转条件。

以下集群更新设置 API 请求将 indices.lifecycle.poll_interval 设置降低到 1m(一分钟)。

PUT /_cluster/settings
{"persistent": {"indices.lifecycle.poll_interval": "1m"}
}

6)使用 op_type create 将你的数据重新索引到新数据流。

如果要按照最初索引的顺序对数据进行分区,可以运行单独的重建索引请求。 这些重新索引请求可以使用单独的支持索引作为源。 你可以使用获取数据流 API 来检索后备索引列表。

例如,你计划将数据从 my-data-stream 重新索引到 new-data-stream。 但是,你想为 my-data-stream 中的每个后备索引提交一个单独的重建索引请求,从最旧的后备索引开始。 这保留了数据最初被索引的顺序。

以下获取数据流 API 请求检索有关 my-data-stream 的信息,包括其支持索引列表。

GET /_data_stream/my-data-stream

响应的 indices 属性包含流的当前后备索引的数组。 数组中的第一项包含有关流的最旧后备索引的信息。

{"data_streams": [{"name": "my-data-stream","timestamp_field": {"name": "@timestamp"},"indices": [{"index_name": ".ds-my-data-stream-2099.03.07-000001", "index_uuid": "Gpdiyq8sRuK9WuthvAdFbw"},{"index_name": ".ds-my-data-stream-2099.03.08-000002","index_uuid": "_eEfRrFHS9OyhqWntkgHAQ"}],"generation": 2,"status": "GREEN","template": "my-data-stream-template","hidden": false,"system": false,"allow_custom_routing": false,"replicated": false}]

我的数据流的索引数组中的第一项。 此项包含有关流的最早支​​持索引 .ds-my-data-stream-2099.03.07-000001 的信息。

以下 reindex API 请求将文档从 .ds-my-data-stream-2099.03.07-000001 复制到 new-data-stream。 请求的 op_type 是创建的。

POST /_reindex
{"source": {"index": ".ds-my-data-stream-2099.03.07-000001"},"dest": {"index": "new-data-stream","op_type": "create"}
}

你还可以使用查询为每个请求重新索引文档的子集。

以下重新索引 API 请求将文档从 my-data-stream 复制到 new-data-stream。 该请求使用范围查询仅重新索引时间戳在上周内的文档。 请注意请求的 op_type 是create。

POST /_reindex
{"source": {"index": "my-data-stream","query": {"range": {"@timestamp": {"gte": "now-7d/d","lte": "now/d"}}}},"dest": {"index": "new-data-stream","op_type": "create"}
}

7)如果你之前更改了 ILM 轮询间隔,请在重建索引完成后将其更改回其原始值。 这可以防止主节点上不必要的负载。

以下集群更新设置 API 请求将 indices.lifecycle.poll_interval 设置重置为其默认值。

PUT /_cluster/settings
{"persistent": {"indices.lifecycle.poll_interval": null}
}

8)使用新的数据流恢复索引。新写入的数据将向这个新的流写入。 对此流的搜索现在将查询你的新数据和重新索引的数据。

9)一旦你确认所有重新索引的数据在新数据流中可用,你就可以安全地删除旧数据流。

以下删除数据流 API请求删除 my-data-stream。 此请求还会删除流的支持索引及其包含的任何数据。

DELETE /_data_stream/my-data-stream

Elasticsearch:Data streams(三)相关推荐

  1. ES中数据流Data streams详解

    一.什么是数据流 官方定义: Data streams 数据流 数据流是可以跨多个索引存储仅限于追加存储的时间序列数据,同时为请求提供单个命名资源. 在 Elasticsearch 7.9之前,通常会 ...

  2. Alternate Data Streams(ADSs)是什么

    微 软的平台不断在增加.公司用的服务器和桌面操作系统运行的一般是winNT和win2000,而家庭用户和学生用的系统一般是winXP.这些平台是很受 欢迎的并且被大范围的使用.可是使用这些操作系统的用 ...

  3. ElasticSearch 深入理解 三:集群部署设计

    ElasticSearch 深入理解 三:集群部署设计 ElasticSearch从名字中也可以知道,它的Elastic跟Search是同等重要的,甚至以Elastic为主要导向. Elastic即可 ...

  4. Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 的解决办法

    问题概述 关于这个问题,博主是在通过K8s/K3s管理器构建ELK日志采集.存储.展示时遇到的一个问题,在构建Elasticsearch时,启动报错 " Likely root cause: ...

  5. ElasticSearch实践(三)Rest API简介

    REST API Elasticsearch提供了非常全面和强大的REST API,可以使用API与集群进行交互. 使用API可以做什么呢? 检查群集,节点和索引运行状况,状态和统计信息 管理您的群集 ...

  6. 记录一次尝试修复elasticsearch Data too large问题

    前言 这周三,一边调试api crashloopbackoff的问题,一边准备写promSQL语句,然后开发小伙伴说环境3的es又挂了,表现就是查询数据报错: circuit_breaking_exc ...

  7. ElasticSearch学习之(三)--搜索入门从lucene到Soler,ElasticSearch

    一. 什么是搜索 搜索大白话来说就是通过部分信息查找我们需要的更多更详细的信息.例如:通过百度,Google等各种工具对视频, 新闻,商品等各种我们需要获取的信息的检索.按照搜索的使用场景大概可以分为 ...

  8. ElasticSearch Java Api(三) -更新索引库

    官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-update.html 一.U ...

  9. ElasticSearch优化系列三:机器设置(内存)

    heap参数设置优化 命令行修改 ./bin/elasticsearch -Xmx10g -Xms10g xmx-JVM最大允许分配的堆内存,按需分配 xms-JVM初始分配的堆内存 此值设置与-Xm ...

最新文章

  1. 计算机应用12班,《计算机应用基础》上机试卷A(10级机电8—12班)
  2. 转用PHP开发企业Wifi网络Web认证系统(附源码)
  3. C#操作SharePoint列表
  4. nyist 132Prime Ring Problem
  5. 金士顿固态硬盘计算机如何识别,金士顿SV300 SF2281固态硬盘SSD不认盘开卡修复教程...
  6. mysql的四层架构_分布式数据库服务器的四层架构
  7. 年入10亿,“山寨”耳机芯片凶猛
  8. Twitter进军NFT领域 发布并赠送7款NFT数字艺术品
  9. axure下载及汉化
  10. Coding and Paper Letter(四十八)
  11. mysql数据库技术与应用实训项目_MySQL数据库项目实训
  12. cfiledialog对话框大小_CFileDialog类 通用对话框
  13. [转自天涯]ISO27001与ISO20000的关系心得
  14. 代码调用SPSS功能执行分析
  15. Git 学习笔记——管理员篇
  16. JS正则表达式(5) = 正则的捕获方法
  17. 学习用Photoshop来设计简单的网页
  18. centos7设置CPU的performance
  19. 蓄电池外壳如何执行EN45545防火试验
  20. 从0和1开始,揭开数字世界的神秘面纱

热门文章

  1. AutoCAD 2020快捷指令大全
  2. python xlwt_python中xlwt是什么
  3. 熵、相对熵、交叉熵等理解
  4. 多域名指向同一个网站
  5. STC51单片机35——五线四相步进电机驱动测试程序(2个步进电机)
  6. JSP如何连接数据库
  7. 在IOS上YUV NV21格式的CVPixelBufferRef转opencv的RGB格式cv::Mat的方法
  8. js 页面高度 页面宽度
  9. oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析
  10. IDEA快捷键、格式和代码规范插件