【Elasticsearch】Elasticsearch动态映射与静态映射详解
warning:
这篇文章距离上次修改已过192天,其中的内容可能已经有所变动。
在Elasticsearch中,动态映射和静态映射是两种不同的映射方式。
静态映射通常在创建索引时定义,并且在索引的整个生命周期内不会改变。静态映射需要预先知道所有字段及其数据类型,并且在索引创建后不能更改。
动态映射则是Elasticsearch的默认行为,它会在文档被索引时自动探测其字段的类型,并相应地创建映射。动态映射可以在文档被索引后随时改变字段的类型,只要字段名没有改变,并且新的类型与原有类型兼容。
例如,假设我们有以下JSON文档需要被索引:
{
"name": "John Doe",
"age": 30,
"email": "john@example.com"
}
如果我们不预先定义映射,Elasticsearch会自动将name
映射为text
类型,将age
映射为long
类型,并将email
映射为keyword
类型。
静态映射示例代码:
PUT /my_index
{
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"age": {
"type": "integer"
},
"email": {
"type": "keyword"
}
}
}
}
动态映射示例代码:
PUT /my_index
{
"mappings": {
"dynamic": "true" // 默认即为true,表示开启动态映射
}
}
POST /my_index/_doc/1
{
"name": "Jane Doe",
"age": 25,
"email": "jane@example.com"
}
在这个例子中,我们首先创建了一个名为my_index
的索引,并定义了静态映射。然后,我们通过POST请求将一个新文档索引到这个索引中,Elasticsearch会自动根据文档字段的数据类型来创建动态映射。
注意,在实际应用中,通常会根据需求选择静态映射还是动态映射,并在索引设计阶段就规划好所有字段及其数据类型,以保证索引性能和功能的最佳实现。
评论已关闭