elasticsearch mapping切换步骤

前提:必须要修改索引字段类型或者由之前的分词变换成不分词等情况,且没有替代方案的前提下。

首先,在无用户使用的情况下,进行es备份,防止以下切换不成功带来的风险。

本文借助postman工具,进行mapping切换,操作步骤如下:

一、获取旧索引mapping
请求方式:GET
请求路径:http://ip:9200/索引名称/_mapping

二、修改mapping
第一步拿到mapping json文件后,找到需要修改的字段,进行字段类型或者是否分词的修改

(es早期版本,设置不分词属性为"index": "not_analyzed")


三、创建新索引
请求方式:POST
请求路径:http://ip:9200/新索引名称


四、新索引创建mapping
请求方式:POST
请求路径:http://ip:9200/新索引名称/类型/_mapping?pretty 

请求参数:新mapping json数据
五、旧索引数据同步至新索引
请求方式:POST
请求路径:http://ip:9200/_reindex

请求参数:

{
  "source": {
    "index": "旧索引名称"
  },
  "dest": {
    "index": "新索引名称"
  }
}

还有一种方式,可以使用elasticdump命令进行数据同步:
elasticdump --input http://ip:9200/旧索引名称 --output http://ip:9200/新索引名称 --type=data
六、确认数据量是否正常
七、新索引设置别名
请求方式:POST
请求路径:http://ip:9200/_aliases

请求参数:
{
        "actions": [
            {"add": {"index":"新索引名称","alias":"旧索引名称"}}
        ]
}

八、删除旧索引
请求方式:DELETE
http://ip::9200/旧索引名称

 项目中,往往最让人恼火的就是前期需求不确定,后期用户不断变更需求,增加我们开发人员的工作量以及安全风险,涉及到历史数据结构改造、数据迁移等等问题。哎,一把血泪史啊.......

总之,尽量避免这种情况,还是需要前期深挖用户当前以及未来需求,以求有一个好的架构。

<think>好的,我现在需要帮用户解答如何在Elasticsearch中创建索引的问题。首先,我得回顾一下Elasticsearch创建索引的基本流程和相关概念。记得用户提到了几个引用,比如索引映射、分片和副本设置,还有别名,这些都需要涵盖进去。 用户提供的引用中,引用[1]提到了索引创建过程,包括映射、别名、分片和副本,所以应该详细说明这些部分。引用[2]和[3]可能涉及索引的状态和响应数据,比如_source字段,但用户的问题主要是创建索引的教程,所以重点放在创建步骤上。 首先,创建索引的HTTP请求方法,应该是PUT或者POST?Elasticsearch中创建索引通常用PUT方法,后面跟索引名称。比如PUT /my_index。然后需要包含请求体,里面设置分片数、副本数、映射等。 接下来,分片和副本的设置。分片数一旦设置就不能修改,这点很重要,需要提醒用户。副本数可以后续调整。例如,在settings里设置"number_of_shards"和"number_of_replicas"。 然后是索引映射,也就是mappings部分。这里要定义字段类型,比如text、keyword、date等。动态映射和显式映射的区别也需要解释,显式映射更可控。引用[1]提到索引映射,所以需要详细说明如何定义各个字段的属性,比如是否启用分析器,是否存储原始值等。 索引别名也是一个重要部分,可以在创建索引时指定别名,或者后续添加。别名对于无缝切换索引很有用,比如在重建索引时不影响应用使用别名访问。 示例部分需要给出一个具体的JSON请求体,展示settings、mappings和aliases的结构。例如,创建一个blog索引,包含title、content、tags等字段,并设置别名blog_alias。 另外,用户可能关心创建索引后的确认,比如返回的响应信息,或者通过GET请求查看索引信息。引用[3]中的_source字段可能是在文档创建时的原始数据,但索引创建本身可能不需要这个,不过可能在示例中提到存储文档时的情况。 可能还需要提到动态模板,允许根据字段名自动匹配类型,但用户的问题可能更关注基础创建,所以可以放在进阶部分或者相关问题里。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如如何更新映射、管理分片副本、使用别名,或者处理时间序列数据如ILM策略。这些问题可以引导用户继续深入学习。 检查是否有遗漏的步骤,比如是否要关闭索引(引用[2]提到索引打开),但创建索引默认是打开的,所以可能不需要涉及。不过用户的问题主要是创建,所以保持步骤简洁明了。 总结步骤:创建索引的HTTP请求、分片和副本设置、定义映射结构、设置别名,给出示例代码,并提醒注意事项如分片数不可修改。然后生成相关问题,帮助用户扩展知识。</think>### Elasticsearch 创建索引教程 在Elasticsearch中,索引是存储文档的逻辑容器,类似于传统数据库中的表。以下是创建索引的核心步骤及详细说明: --- #### **1. 基本语法与请求格式** 使用HTTP PUT请求创建索引,并指定名称(如`my_index`): ```bash PUT /my_index { "settings": { ... }, # 分片、副本等配置 "mappings": { ... }, # 字段类型定义 "aliases": { ... } # 索引别名 } ``` --- #### **2. 关键配置项说明** **a. 分片与副本设置** - **分片(Shards)**:数据拆分的单元,创建后不可修改,默认5个分片。 ```json "settings": { "number_of_shards": 3, "number_of_replicas": 1 } ``` - **副本(Replicas)**:分片的备份,提升容错性,可动态调整[^1]。 **b. 索引映射(Mappings)** 定义字段类型及属性,例如: ```json "mappings": { "properties": { "title": { "type": "text", "analyzer": "ik_max_word" }, "content": { "type": "text" }, "tags": { "type": "keyword" }, "created_at": { "type": "date" } } } ``` - `text`类型支持全文搜索,`keyword`类型用于精确匹配[^1]。 **c. 索引别名(Aliases)** 为索引添加逻辑名称,便于无缝切换: ```json "aliases": { "blog_alias": {} } ``` --- #### **3. 完整示例** 创建名为`blog`的索引,包含分片配置、字段映射和别名: ```bash PUT /blog { "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "title": { "type": "text", "fields": { "raw": { "type": "keyword" } } }, "author": { "type": "keyword" }, "publish_date": { "type": "date" } } }, "aliases": { "recent_blogs": {} } } ``` --- #### **4. 验证与操作** - **检查索引状态**: ```bash GET /blog/_settings # 查看配置 GET /blog/_mapping # 查看映射 ``` - **插入文档**: ```bash POST /blog/_doc/1 { "title": "Elasticsearch入门指南", "author": "张三", "publish_date": "2023-10-01" } ``` 响应中将包含文档的`_id`和`_source`(原始数据)[^3]。 --- #### **注意事项** - 分片数量一旦设置无法修改,需提前规划数据规模[^2]。 - 使用动态模板(Dynamic Templates)可自动推断字段类型。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值