1. 安装中文索引
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意:版本要和ES版本对应
解压后放入plugins文件中
然后重启服务:docker-compose restart elasticsearch
,大概需要1分钟
2. 数据迁移
当索引存在时不能修改已有索引分词器,会出现错误:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "Mapper for [content] conflicts with existing mapper:\n\tCannot update parameter [analyzer] from [default] to [ik_max_word]"
}
],
"type" : "illegal_argument_exception",
"reason" : "Mapper for [content] conflicts with existing mapper:\n\tCannot update parameter [analyzer] from [default] to [ik_max_word]"
},
"status" : 400
}
因此需要进行一下步骤:
- 使用新的
mappings
创建新索引 - 使用
reindex
将数据从旧索引复制到新索引 - 删除旧的索引,并将设置新索引的别名
使用mappings新建索引
PUT /test_new
{
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
使用reindex
将数据从旧索引复制到新索引
POST /_reindex
{
"source" : {
"index" : "test"
},
"dest" : {
"index" : "test_new",
"version_type" : "external"
}
}
删除旧的索引并设置别名
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "test_new",
"alias" : "test"
}
},
{
"remove_index" : {
"index": "test"
}
}
]
}
3. 总结
重新索引耗时比较长,最好在新建索引时设计好mappings
中的分词器,万不得已再使用reindex