Elasticsearch利用kibana调整索引mapping结构
Posted 好好生活_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch利用kibana调整索引mapping结构相关的知识,希望对你有一定的参考价值。
引言
在初次创建索引后,索引结构一般都固定不变,但也难免会遇到需求更改而索引结构也需要有对应的调整。本篇博客将介绍如何利用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结构,以免引起不必要的麻烦。
以上是关于Elasticsearch利用kibana调整索引mapping结构的主要内容,如果未能解决你的问题,请参考以下文章
利用kibana学习 elasticsearch restful api (DSL)