映射和字段类型
映射告诉 UDB-SX 如何存储和索引您的文档及其字段。您可以指定每个字段的数据类型(例如,将 year 设为 date),以使存储和查询更高效。
虽然 动态映射 会自动添加新数据和字段,但建议使用显式映射。显式映射允许您预先定义确切的结构和数据类型。这有助于保持数据一致性并优化性能,特别是对于大型数据集或高吞吐量的索引操作。
例如,使用显式映射,您可以确保 year 被当作文本处理,而 age 被当作整数,而不是让动态映射将两者都解释为整数。
动态映射
当您索引文档时,UDB-SX 会通过动态映射自动添加字段。您也可以显式地向索引映射添加字段。
动态映射类型
| 类型 | 描述 |
|---|---|
null |
null 字段无法被索引或搜索。当字段设置为 null 时,UDB-SX 的行为就像该字段没有值。 |
boolean |
UDB-SX 接受 true 和 false 作为布尔值。空字符串等同于 false。 |
float |
单精度 32 位 IEEE 754 浮点数,仅限于有限值。 |
double |
双精度 64 位 IEEE 754 浮点数,仅限于有限值。 |
integer |
有符号 32 位整数。 |
object |
对象是标准的 JSON 对象,可以拥有自己的字段和映射。例如,一个 movies 对象可以具有 title、year 和 director 等额外属性。 |
array |
UDB-SX 没有特定的数组数据类型。数组被表示为与字段关联的相同数据类型(例如整数或字符串)的一组值。在索引时,您可以为字段传递多个值,UDB-SX 会将其视为数组。空数组是有效的,并被识别为零元素的数组字段——而不是没有值的字段。UDB-SX 支持查询和过滤数组,包括检查值、范围查询以及连接和交集等数组操作。嵌套数组(可能包含复杂对象或其他数组)也可用于高级数据建模。 |
text |
表示完整文本值的字符串字符序列。 |
keyword |
结构化字符的字符串序列,例如电子邮件地址或邮政编码。 |
| 日期检测字符串 | 默认启用。如果新的字符串字段匹配日期格式,则该字符串将被处理为 date 字段。例如,date: "2012/03/11" 被处理为日期。 |
| 数字检测字符串 | 如果禁用,UDB-SX 可能会自动将数值作为字符串处理,而它们本应作为数字处理。启用后,UDB-SX 可以将字符串处理为 long、integer、short、byte、double、float、half_float、scaled_float 和 unsigned_long。默认是禁用。 |
动态模板
动态模板用于根据数据类型、字段名或字段路径为动态添加的字段定义自定义映射。它们允许您为数据定义灵活的模式,能够自动适应输入数据结构或格式的变化。
您可以使用以下语法定义动态映射模板:
PUT index
{
"mappings": {
"dynamic_templates": [
{
"fields": {
"mapping": {
"type": "short"
},
"match_mapping_type": "string",
"path_match": "status*"
}
}
]
}
}
此映射配置会动态地将任何名称以 status 开头的字段(例如 status_code)映射到 short 数据类型,前提是索引期间提供的初始值是字符串。
动态映射参数
dynamic_templates 支持以下参数用于匹配条件和映射规则。默认值为 null。
| 参数 | 描述 |
|---|---|
match_mapping_type |
指定触发映射的 JSON 数据类型(例如 string、long、double、object、binary、boolean、date)。 |
match |
用于匹配字段名并应用映射的正则表达式。 |
unmatch |
用于从映射中排除字段名的正则表达式。 |
match_pattern |
确定模式匹配行为,可以是 regex 或 simple。默认为 simple。 |
path_match |
允许使用正则表达式匹配嵌套字段路径。 |
path_unmatch |
使用正则表达式从映射中排除嵌套字段路径。 |
mapping |
要应用的映射配置。 |
显式映射
如果您确切知道需要使用哪些字段数据类型,可以在创建索引时在请求体中指定它们,如下面的示例请求所示:
PUT sample-index1
{
"mappings": {
"properties": {
"year": { "type" : "text" },
"age": { "type" : "integer" },
"director":{ "type" : "text" }
}
}
}
响应
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "sample-index1"
}
要向现有索引或数据流添加映射,您可以向 _mapping 端点发送 PUT 或 POST HTTP 方法的请求,如下面的示例请求所示:
POST sample-index1/_mapping
{
"properties": {
"year": { "type" : "text" },
"age": { "type" : "integer" },
"director":{ "type" : "text" }
}
}
您无法更改现有字段的映射,只能修改字段的映射参数。
映射参数
映射参数用于配置索引字段的行为。更多信息,请参阅 映射和字段类型。
映射限制设置
UDB-SX 有一些映射限制和设置,例如下表中列出的设置。可以根据您的需求配置这些设置。
| 设置 | 默认值 | 允许值 | 类型 | 描述 |
|---|---|---|---|---|
index.mapping.nested_fields.limit |
50 | [0,) | 动态 | 限制索引映射中可以定义的嵌套字段的最大数量。 |
index.mapping.nested_objects.limit |
10,000 | [0,) | 动态 | 限制单个文档中可以创建的嵌套对象的最大数量。 |
index.mapping.total_fields.limit |
1,000 | [0,) | 动态 | 限制索引映射中可以定义的字段的最大数量。 |
index.mapping.depth.limit |
20 | [1,100] | 动态 | 限制索引映射中可以定义的嵌套对象和嵌套字段的最大深度。 |
index.mapping.field_name_length.limit |
50,000 | [1,50000] | 动态 | 限制索引映射中可以定义的字段名的最大长度。 |
index.mapper.dynamic |
true | {true,false} | 动态 | 确定是否应将新字段动态添加到映射中。 |
获取映射
要获取一个或多个索引的所有映射,请使用以下请求:
GET <index>/_mapping
在上面的请求中,<index> 可以是一个索引名或以逗号分隔的索引名列表。
要获取所有索引的所有映射,请使用以下请求:
GET _mapping
要获取特定字段的映射,请提供索引名和字段名:
GET _mapping/field/<fields>
GET /<index>/_mapping/field/<fields>
<index> 和 <fields> 都可以指定为单个值或以逗号分隔的列表。例如,以下请求检索 sample-index1 中 year 和 age 字段的映射:
GET sample-index1/_mapping/field/year,age
响应包含指定的字段:
{
"sample-index1" : {
"mappings" : {
"year" : {
"full_name" : "year",
"mapping" : {
"year" : {
"type" : "text"
}
}
},
"age" : {
"full_name" : "age",
"mapping" : {
"age" : {
"type" : "integer"
}
}
}
}
}
}
映射用例
有关用例示例,包括映射字符串字段和忽略格式错误的 IP 地址的示例,请参阅 映射用例。