最近使用es的时候,在模糊查询的时候,该字段使用了分词字段类型,导致了分词字段类型又用了分词查询,导致的结果就是啥都没检索出来。
基于上边的情况做了更改,但是天算不如人算呀,自己的插入字段配置被改了字段类行,导致测试和生产字段不一致。
算了,不唠叨,开始。
因为字段类型不一致,网上搜索了很多方法,都是没有直接更改字段类型的命令,全是新建索引再去复制数据。泪奔啊。
基于kibana 操作
原索引 名称 me_sad_dev
使用GET me_sad_dev(索引名)/_mapping 查询出原索引数据结构
{
"mappings": {
"doc": {
"properties": {
"catalogueId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"catalogueTags": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"contentType": {
"type": "long"
},
"createTime": {
"type": "long"
},
"imageUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"openStatus": {
"type": "long"
},
"openType": {
"type": "long"
},
"relatedWords": {
"type": "keyword"
}
}
}
}
}
新建一个索引 me_sad_dev_copy
PUT me_sad_dev_copy
{
"mappings": {
"doc": {
"properties": {
"catalogueId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"catalogueTags": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"contentType": {
"type": "long"
},
"createTime": {
"type": "long"
},
"imageUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"openStatus": {
"type": "long"
},
"openType": {
"type": "long"
},
"relatedWords": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
注意新建索引更改你所需要的类型
/**
原字段类型
*/
"relatedWords": {
"type": "keyword"
}
/**
*新字段类型
*/
"relatedWords": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
把老表数据复制到新表里
POST /_reindex
{
"source": {
"index": "me_sad_dev"
},
"dest": {
"index": "me_sad_dev_copy"
}
}
现在就是新索引的数据和字段类型都是你需要的
删除 老索引
DELETE me_sad_dev
可以把新索引名 别名 成 原索引名
POST /_aliases
{
"actions": [
{"add": {"index": "me_sad_dev_copy", "alias": "me_sad_dev"}}
]
}
还有另一种方法就是在新建一个和原索引一样的名,重复赋值,就是把一二三步再执行一次