FakeOrange
预计阅读时间:2分钟29秒

Elasticsearch更新内容及备份

如何备份并更改现有Mapping或是数据

0
0

1. 新增字段


如果需要在已有索引中新增字段,可以直接使用 PUT 请求来更新映射。新增字段不会影响已有的数据。

# 假设索引名为 `my_index`
new_mapping = {
    "properties": {
        "new_field": {
            "type": "text"
        }
    }
}

es.indices.put_mapping(index="my_index", body=new_mapping)

2. 修改字段属性


修改字段的类型


Elasticsearch 不允许直接更改字段的类型。例如,无法将 text 字段改为 keyword 类型。要实现字段类型的修改,需要重建索引


修改字段的属性


可以对部分字段的属性进行修改,比如将 text 类型字段的 analyzer 变为自定义分词器,但仅适用于特定字段的属性,以下是一些示例。


# 示例:修改分词器属性
update_mapping = {
    "properties": {
        "title": {
            "type": "text",
            "analyzer": "my_custom_analyzer"  # 更新自定义分词器
        }
    }
}

es.indices.put_mapping(index="my_index", body=update_mapping)


请注意,更新某些属性(如 analyzer)会导致新的文档使用更新后的配置,但已有文档不会重新索引,因此更新效果仅限于新增数据。



3. 重建索引以更改映射


当需要更改字段类型或进行复杂的映射更改时,需要通过重建索引的方式来实现。这通常包括以下步骤:

  1. 创建新索引:按照新的映射创建一个新的索引。
  2. 数据迁移:将旧索引的数据迁移到新索引。
  3. 切换索引别名(可选):切换别名,使应用无缝切换到新索引。
  4. 删除旧索引(可选):确认无误后,删除旧索引。


以下是详细步骤:


3.1 创建新索引


# 定义新的映射
new_mapping = {
    "mappings": {
        "properties": {
            "title": {
                "type": "keyword"  # 改为 keyword 类型
            },
            "description": {
                "type": "text"
            },
            # 其他字段保持不变或进行新的配置
        }
    }
}

# 创建新索引(假设新索引名为 `my_index_v2`)
es.indices.create(index="my_index_v2", body=new_mapping)

3.2 数据迁移


可以使用 reindex API 将数据从旧索引迁移到新索引:

# 使用 reindex API 迁移数据
reindex_body = {
    "source": {
        "index": "my_index"  # 旧索引
    },
    "dest": {
        "index": "my_index_v2"  # 新索引
    }
}

es.reindex(body=reindex_body, wait_for_completion=True)

3.3 切换索引别名(可选)


如果系统中使用了别名,可以将别名指向新索引,以实现应用无缝切换。

# 切换别名
actions = [
    {"remove": {"index": "my_index", "alias": "my_index_alias"}},
    {"add": {"index": "my_index_v2", "alias": "my_index_alias"}}
]

es.indices.update_aliases(body={"actions": actions})


这样,应用可以继续通过 my_index_alias 别名访问数据,不需要感知底层索引的变化。


3.4 删除旧索引(可选)


确认新索引工作正常后,可以删除旧索引以释放存储空间。

# 删除旧索引
es.indices.delete(index="my_index")

注意事项


  • 重建索引:更改字段类型或复杂的映射更改时,必须使用重建索引的方式。直接更新映射将会失败。


  • 更新映射的限制:更新映射后仅影响新写入的文档,已有文档不会重新索引。因此,如果需要映射立即生效,需要重建索引或手动重新索引数据。


  • 分片数不可更改:Elasticsearch 中的索引一旦创建,分片数不可修改,若需更改分片数只能重建索引。


  • 数据备份:在进行重建索引等重要操作前,建议备份数据以避免数据丢失风险。


评论
Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号