elasticsearch 8 修改分词器并数据迁移

  • Post author:
  • Post category:其他




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
}

因此需要进行一下步骤:

  1. 使用新的

    mappings

    创建新索引
  2. 使用

    reindex

    将数据从旧索引复制到新索引
  3. 删除旧的索引,并将设置新索引的别名



使用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



版权声明:本文为this_is_id原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。