一、es索引的增删改查方法
1、查询索引
get请求
http://地址/索引/类型/_mapping
无需参数
2、删除索引
delete请求
http://地址/索引
3、创建索引
需要 “新建索引”——>“添加mapping” 两步(我目前只知道这一种方法)。
第一步,先在脚本插件新建索引
第二步,为新建索引创建Mapping(即发设置字段参数的请求)
因为参数大部分与删除前的索引相同,只有个别地方需要修改;所以,我在删除旧索引之前,复制了mapping中的参数、做了一点修改,然后在设置新索引mapping这里粘贴上去即可。
4、修改索引(修改字段类型)
1)思路
es不能直接修改索引字段类型,需要删除调新建,具体方法如下
1. 创建一个中间索引
2. 向中间索引备份源索引的数据(mapping)
3. 查询确认数据是否copy过去
4. 删除有问题的索引
5. 重新创建同名的索引(★字段类型修改正确★)
6. 从中间索引还原到源索引的数据
7. 删除中间索引
2)具体执行
a、实例场景:Es报MapperParsingException异常
线上功能报错,一看日志是往es中添加数据报错,错误日志如下:
org.elasticsearch.index.mapper.MapperParsingException: failed to parse field [categoryId] of type [integer] in document with id '1628993540560302081'
...
Caused by: java.io.IOException: Numeric value (1621025777837514753) out of range of int
说是数据中有个字段类型转换错误,一查es脚本工具,果然生产es索引中categoryId这个字段是integer类型,而实际是long类型。
我这次遇到问题的es索引中没有旧数据,所以只要把字段类型错的索引删除,然后新建同名索引(字段类型改正确)
b、执行前备份
因为我的旧索引中没有数据,所以可以直接删除、新增;
但是很多时候,在执行删除前需要备份之前的参数。
下面介绍一种执行前备份参数的具体方法:
# 1. 创建一个中间索引
#创建索引
PUT demo_metric_1/
# 创建Mapping
POST demo_metric_1/type/_mapping
{
"type": {
"properties": {
"log_time_date": {
"type": "date",
"format": "epoch_millis"
},
.....
}
}
}
# 2. 向中间索引备份源索引的数据
# 重建索引
POST _reindex
{
"source": {
"index": "demo_metric"
},
"dest": {
"index": "demo_metric_1"
}
}
# 3.查询确认数据是否copy过去
GET /demo_metric/type/_search
GET /demo_metric_1/type/_search
# 4.删除有问题的索引
# 删除有问题的索引
DELETE demo_metric
# 5.重新创建同名的索引(★字段类型修改正确★)
#创建索引
PUT demo_metric/
# 创建Mapping
POST demo_metric/type/_mapping
{
"type": {
"properties": {
"log_time_date": {
"type": "date",
"format": "epoch_millis"
},
.....
}
}
}
# 6. 从中间索引还原到源索引的数据
# 重建索引
POST _reindex
{
"source": {
"index": "demo_metric_1"
},
"dest": {
"index": "demo_metric"
}
}
# 7. 删除中间索引
DELETE demo_metric_1
c、删除旧索引
可以通过es脚本插件的删除按钮删除
也可以发请求删除,参考1.2删除索引;
c、重新创建同名的索引(★字段类型修改正确★)
参考1.3创建索引