引言

在初次创建索引后,索引结构一般都固定不变,但也难免会遇到需求更改而索引结构也需要有对应的调整。本篇博客将介绍如何利用kibana新增字段,并且初始化值。

查看索引mapping结构

首先,我们可以先通过kibana使用以下API查看某一索引的结构:
GET /'index_name'/'index_type'/_mapping 
如果对kibana使用API有疑问,可以查看博客kibana安装与使用教程
注:API中的index_name和index_type为常量,对应索引名和索引类型。

修改索引mapping结构

一、新增字段
如果是新增字段,可以直接使用以下API:
PUT 'index_name'/_mapping/'index_type'
{
  "properties": {
    "field_name":{
        "type": "long"
    }
  }
}
使用PUT请求,field_name为对应新增字段的名称,type为该字段的类型,如long、keyword等。
新增字段赋值
字段增加之后,我们可能需要初始化该字段的值,API如下:
POST /'index_name'/'index_type'/_update_by_query
{
    "query": {
        "match_all": {}
    },
    "script": {
        "source": "if (ctx._source.type== null) {ctx._source.type= 0}"
    }
}
通过以上方法,我们可以根据查询条件更新字段的值。

二、修改字段

由于Elasticsearch底层使用了lucene的原因,不支持对mapping的修改,可使用索引重建的方式,步骤如下:
1. 创建索引idx_v1并添加数据
#创建索引v1
PUT /idx_v1
#创建索引v1mapping结构
POST /idx_v1/_doc/_mapping
{
  "properties": {
    "id": {
      "type": "long"
    },
    "name": {
      "type": "text"
    }
  }
}
#给索引添加别名
POST /_aliases
{
    "actions": [
        { "add": {
            "alias": "idx_alias",
            "index": "idx_v1"
        }}
    ]
}
#索引v1添加数据
POST idx_v1/_doc
{
  "id":1283239366077513729,
  "name":"天天"
}
#查询v1mapping结构
GET /idx_v1/_doc/_mapping
现在想将v1中的id字段类型修改为keyword类型,我们可以新建一个索引,mapping结构id字段为keyword。
2. 创建索引idx_v2
#创建索引v2
PUT /idx_v2
#创建索引mapping结构
POST /idx_v2/_doc/_mapping
{
  "properties": {
    "id": {
      "type": "keyword"
    },
    "name": {
      "type": "text"
    }
  }
}
3. 使用reindex API,将旧索引数据导入新索引
POST _reindex
{
  "source": {
    "index": "idx_v1",
    "type": "_doc"

  },
  "dest": {
    "index": "idx_v2",
    "type": "_doc"
  }
}
4. 给新索引v2添加别名
POST /_aliases
{
    "actions": [
        { "add": {
            "alias": "idx_alias",
            "index": "idx_v2"
        }}
    ]
}
5. 将旧索引别名添加迁移到新索引请求:
POST /_aliases
{
    "actions" : [
        { "remove" : 
          { "index" : "idx_v1", "alias" : "item_alias" }
        },
        { "add" : 
          { "index" : "idx_v2", "alias" : "item_alias" }
        }
    ]
}
6. 删除旧索引v1
DELETE /idx_v1

总结

修改索引mapping结构操作还是比较复杂的,所以在建立索引前需要考虑好mapping结构,以免引起不必要的麻烦。
点击阅读全文
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐