- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
数值字段类型
编辑数值字段类型
编辑支持以下数值类型:
|
带符号的 64 位整数,最小值为 |
|
带符号的 32 位整数,最小值为 |
|
带符号的 16 位整数,最小值为 |
|
带符号的 8 位整数,最小值为 |
|
双精度 64 位 IEEE 754 浮点数,限制为有限值。 |
|
单精度 32 位 IEEE 754 浮点数,限制为有限值。 |
|
半精度 16 位 IEEE 754 浮点数,限制为有限值。 |
|
一个浮点数,由一个固定的 |
|
无符号 64 位整数,最小值为 0,最大值为 |
以下是配置具有数值字段的映射的示例
resp = client.indices.create( index="my-index-000001", mappings={ "properties": { "number_of_bytes": { "type": "integer" }, "time_in_seconds": { "type": "float" }, "price": { "type": "scaled_float", "scaling_factor": 100 } } }, ) print(resp)
response = client.indices.create( index: 'my-index-000001', body: { mappings: { properties: { number_of_bytes: { type: 'integer' }, time_in_seconds: { type: 'float' }, price: { type: 'scaled_float', scaling_factor: 100 } } } } ) puts response
res, err := es.Indices.Create( "my-index-000001", es.Indices.Create.WithBody(strings.NewReader(`{ "mappings": { "properties": { "number_of_bytes": { "type": "integer" }, "time_in_seconds": { "type": "float" }, "price": { "type": "scaled_float", "scaling_factor": 100 } } } }`)), ) fmt.Println(res, err)
const response = await client.indices.create({ index: "my-index-000001", mappings: { properties: { number_of_bytes: { type: "integer", }, time_in_seconds: { type: "float", }, price: { type: "scaled_float", scaling_factor: 100, }, }, }, }); console.log(response);
PUT my-index-000001 { "mappings": { "properties": { "number_of_bytes": { "type": "integer" }, "time_in_seconds": { "type": "float" }, "price": { "type": "scaled_float", "scaling_factor": 100 } } } }
double
、float
和 half_float
类型认为 -0.0
和 +0.0
是不同的值。因此,在 -0.0
上执行 term
查询将不会匹配 +0.0
,反之亦然。范围查询也是如此:如果上限是 -0.0
,则 +0.0
将不匹配,如果下限是 +0.0
,则 -0.0
将不匹配。
我应该使用哪种类型?
编辑就整数类型(byte
、short
、integer
和 long
)而言,您应该选择足以满足您用例的最小类型。这将有助于提高索引和搜索的效率。但请注意,存储是根据实际存储的值进行优化的,因此选择一种类型而不是另一种类型不会对存储需求产生影响。
对于浮点类型,通常更有效的方法是使用比例因子将浮点数据存储为整数,这正是 scaled_float
类型在底层所做的事情。例如,price
字段可以存储在 scaled_float
中,scaling_factor
为 100
。所有 API 的工作方式就像该字段存储为 double 一样,但在底层,Elasticsearch 将使用美分数量 price*100
,这是一个整数。这主要有助于节省磁盘空间,因为整数比浮点数更容易压缩。scaled_float
也非常适合用于牺牲精度来换取磁盘空间。例如,假设您正在跟踪 CPU 利用率,其数值介于 0
和 1
之间。CPU 利用率是 12.7%
还是 13%
通常并不重要,因此您可以使用 scaling_factor
为 100
的 scaled_float
,以便将 CPU 利用率四舍五入到最接近的百分比,从而节省空间。
如果 scaled_float
不合适,那么您应该在浮点类型中选择足够满足用例的最小类型:double
、float
和 half_float
。以下是一个比较这些类型的表,以帮助您做出决定。
类型 | 最小值 | 最大值 | 有效位数 位/数字 |
示例精度损失 |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
映射数值标识符
并非所有数值数据都应映射为数值字段数据类型。Elasticsearch 针对 range
查询优化数值字段,例如 integer
或 long
。但是,keyword
字段更适合 term
和其他 term 级 查询。
标识符,例如 ISBN 或产品 ID,很少在 range
查询中使用。但是,它们通常使用 term 级查询检索。
如果满足以下条件,请考虑将数值标识符映射为 keyword
:
- 您不打算使用
range
查询搜索标识符数据。 - 快速检索很重要。
keyword
字段上的term
查询搜索通常比数值字段上的term
搜索更快。
如果您不确定使用哪种,则可以使用多字段将数据映射为 keyword
和数值数据类型。
数值字段的参数
编辑数值类型接受以下参数
-
coerce
- 尝试将字符串转换为数字并截断整数的分数。接受
true
(默认)和false
。不适用于unsigned_long
。请注意,如果使用script
参数,则无法设置此参数。 -
doc_values
- 是否应将字段以列式方式存储在磁盘上,以便以后可用于排序、聚合或脚本?接受
true
(默认)或false
。 -
ignore_malformed
- 如果为
true
,则会忽略格式错误的数字。如果为false
(默认),则格式错误的数字会引发异常并拒绝整个文档。请注意,如果使用script
参数,则无法设置此参数。 -
index
- 该字段是否应可快速搜索?接受
true
(默认)和false
。只有启用了doc_values
的数值字段也可以被查询,尽管速度较慢。 -
meta
- 有关该字段的元数据。
-
null_value
- 接受与字段相同
type
的数值,该数值将替换任何显式null
值。默认为null
,这意味着该字段被视为缺失。请注意,如果使用script
参数,则无法设置此参数。 -
on_script_error
- 定义如果
script
参数定义的脚本在索引时抛出错误时该怎么做。接受fail
(默认),这将导致整个文档被拒绝,以及continue
,这将把该字段注册到文档的_ignored
元数据字段中,并继续索引。只有在设置了script
字段时,才能设置此参数。 -
script
- 如果设置此参数,则该字段将索引此脚本生成的值,而不是直接从源读取值。如果在输入文档中为此字段设置了值,则该文档将被拒绝并出现错误。脚本的格式与其运行时等效项相同。只能在
long
和double
字段类型上配置脚本。 -
store
- 字段值是否应存储并可与
_source
字段分开检索。接受true
或false
(默认)。 -
time_series_dimension
-
(可选,布尔值)
将字段标记为时间序列维度。默认为
false
。index.mapping.dimension_fields.limit
索引设置限制索引中维度的数量。维度字段具有以下约束
doc_values
和index
映射参数必须为true
。
在数值字段类型中,只有
byte
、short
、integer
、long
和unsigned_long
字段支持此参数。数值字段不能既是时间序列维度又是时间序列指标。
-
time_series_metric
-
(可选,字符串)将该字段标记为时间序列指标。该值为指标类型。您无法更新现有字段的此参数。
数值字段的有效
time_series_metric
值-
counter
- 一个累积指标,只会单调递增或重置为
0
(零)。例如,错误或已完成任务的计数。 -
gauge
- 一个表示单个数值的指标,可以任意增大或减小。例如,温度或可用磁盘空间。
-
null
(默认) - 不是时间序列指标。
对于数值时间序列指标,
doc_values
参数必须为true
。数值字段不能既是时间序列维度又是时间序列指标。 -
scaled_float
的参数
编辑scaled_float
接受一个附加参数
|
编码值时使用的比例因子。在索引时,值将乘以该因子并四舍五入到最接近的 long 值。例如, |
scaled_float
饱和
编辑scaled_float
存储为单个 long
值,该值是原始值乘以比例因子的乘积。如果乘法运算导致的值超出 long
的范围,则该值将饱和到 long
的最小值或最大值。例如,如果比例因子为 100
,且值为 92233720368547758.08
,则预期值为 9223372036854775808
。但是,存储的值为 9223372036854775807
,这是 long
的最大值。
当比例因子或提供的 float
值非常大时,这可能会导致 范围查询 出现意外结果。
合成 _source
编辑合成 _source
仅对 TSDB 索引(index.mode
设置为 time_series
的索引)普遍可用。对于其他索引,合成 _source
处于技术预览状态。技术预览版中的功能可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。
所有数值字段在其默认配置中都支持合成 _source
。合成 _source
不能与 copy_to
一起使用,也不能与禁用 doc_values
一起使用。
合成源可能会对数值字段值进行排序。例如
resp = client.indices.create( index="idx", settings={ "index": { "mapping": { "source": { "mode": "synthetic" } } } }, mappings={ "properties": { "long": { "type": "long" } } }, ) print(resp) resp1 = client.index( index="idx", id="1", document={ "long": [ 0, 0, -123466, 87612 ] }, ) print(resp1)
const response = await client.indices.create({ index: "idx", settings: { index: { mapping: { source: { mode: "synthetic", }, }, }, }, mappings: { properties: { long: { type: "long", }, }, }, }); console.log(response); const response1 = await client.index({ index: "idx", id: 1, document: { long: [0, 0, -123466, 87612], }, }); console.log(response1);
PUT idx { "settings": { "index": { "mapping": { "source": { "mode": "synthetic" } } } }, "mappings": { "properties": { "long": { "type": "long" } } } } PUT idx/_doc/1 { "long": [0, 0, -123466, 87612] }
将变为
{ "long": [-123466, 0, 0, 87612] }
缩放浮点数将始终应用其缩放因子,因此
resp = client.indices.create( index="idx", settings={ "index": { "mapping": { "source": { "mode": "synthetic" } } } }, mappings={ "properties": { "f": { "type": "scaled_float", "scaling_factor": 0.01 } } }, ) print(resp) resp1 = client.index( index="idx", id="1", document={ "f": 123 }, ) print(resp1)
const response = await client.indices.create({ index: "idx", settings: { index: { mapping: { source: { mode: "synthetic", }, }, }, }, mappings: { properties: { f: { type: "scaled_float", scaling_factor: 0.01, }, }, }, }); console.log(response); const response1 = await client.index({ index: "idx", id: 1, document: { f: 123, }, }); console.log(response1);
PUT idx { "settings": { "index": { "mapping": { "source": { "mode": "synthetic" } } } }, "mappings": { "properties": { "f": { "type": "scaled_float", "scaling_factor": 0.01 } } } } PUT idx/_doc/1 { "f": 123 }
将变为
{ "f": 100.0 }