Elasticsearch 中的映射(mapping)定义了索引中字段的结构和属性,如字段类型、分析器设置、多字段(multi-field)等。映射操作包括创建、查看、更新和删除映射。以下是一些实战示例:
一、创建映射
1. 创建索引时定义映射
创建索引时直接指定映射,如前所述:
curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"title": { "type": "text" },
"content": { "type": "text" },
"author": { "type": "keyword" },
"publish_date": { "type": "date" }
}
}
}'
2. 使用PUT映射API单独定义映射
如果索引已经存在,可以使用 PUT
映射 API 更新或添加映射:
curl -X PUT "localhost:9200/my_index/_mapping" -H 'Content-Type: application/json' -d'
{
"properties": {
"new_field": {
"type": "integer"
}
}
}'
此操作会添加或修改现有索引的映射。请注意,某些映射更改(如字段类型变更)可能需要重新索引数据才能生效。
二、查看映射
1. 获取索引映射
查询指定索引的完整映射定义:
curl -X GET "localhost:9200/my_index/_mapping?pretty"
或在 Kibana Dev Tools Console:
GET my_index/_mapping?pretty
这将返回 my_index
的所有映射细节,包括字段类型、属性等。
2. 查看单个字段映射
查询特定字段的映射信息:
curl -X GET "localhost:9200/my_index/_mapping/field/title?pretty"
或在 Kibana Dev Tools Console:
GET my_index/_mapping/field/title?pretty
三、更新映射
1. 添加或修改字段映射
向现有映射中添加或修改字段:
curl -X PUT "localhost:9200/my_index/_mapping" -H 'Content-Type: application/json' -d'
{
"properties": {
"new_field": {
"type": "integer"
},
"existing_field": {
"type": "text",
"analyzer": "english"
}
}
}'
这里添加了 new_field
并修改了 existing_field
的映射属性。请注意,某些映射更改可能需要重新索引数据才能生效。
2. 更新字段多字段设置
为已有字段添加多字段(multi-field)配置:
curl -X PUT "localhost:9200/my_index/_mapping" -H 'Content-Type: application/json' -d'
{
"properties": {
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}'
这将在 title
字段基础上添加一个子字段 title.raw
,类型为 keyword
,用于精确匹配或聚合。
四、删除映射
注意:Elasticsearch 不支持直接删除映射。 如果需要移除某个字段,最接近的做法是创建一个新的索引,其映射不包含要删除的字段,然后将旧索引的数据重新索引到新索引中。删除旧索引后,新索引即替代了原索引,实现了映射的“更新”。
五、映射最佳实践
-
明确字段类型:为每个字段指定确切的数据类型,避免依赖动态映射可能导致的意外类型推断。
-
使用多字段:对于需要进行全文搜索和精确匹配的字段,如标题或标签,可以为其配置一个
text
类型字段和一个keyword
类型子字段。 -
指定分析器:对于文本字段,根据业务需求选择或自定义分析器,确保分词效果符合预期。
-
考虑性能:合理设置映射属性以优化查询性能,如为不需要排序或聚合的字段设置
index=false
,避免存储不必要的_source
数据。 -
规划映射变更:由于映射更新可能导致数据重新索引,应提前规划并在低峰时段执行,必要时使用 Reindex API。
通过以上实战示例,您可以对 Elasticsearch 中的映射进行创建、查看、更新等操作,并遵循最佳实践来优化索引结构。在实际使用中,应密切关注官方文档,因为映射功能可能会随Elasticsearch版本更新而有所变化。