解决ElasticSearch5.x中@Field注解之IK分词不能用的问题
2024-08-26 00:12:15
一、概述
环境:ElasticSearch版本5.6.3,SpringBoot 2.0.2.RELEASE,索引myIndex
问题描述:使用@Field注解给实体类指定ik分词解析器(ik_smart/ik_max_word),测试分词功能,发现并不能达到预期的效果,查看mapping,并没有自动生成ik配置。
二、解决方案
由于ElasticSearch索引一旦建立,就无法动态修改其字段的映射类型,为了不影响线上的访问,需要无缝切换到新的索引上。使用 ElasticSearch 提供的 reindex api 来迁移数据,创建新的索引
1. 创建新的索引
PUT /myIndex_v2
2. 设置新索引的mapping
PUT /myIndex_v2/_mapping/myIndex_v2
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"createTime": {
"type": "long"
}
}
}
3. 同步数据
使用 reindex 将原来的索引重建到新的索引上
POST /_reindex
{
"source": {
"index": "myIndex"
},
"dest": {
"index": "myIndex_v2"
}
}
4. 查看数据是否已同步到新的索引上
GET /myIndex_v2/_search
5. 使用别名,切换索引(同时删除原索引myIndex)
POST /_aliases
{
"actions": [
{
"add": {
"index": "myIndex_v2",
"alias": "myIndex"
}
},
{
"remove_index": {
"index": "myIndex"
}
}
]
}
大功告成,现在可以同时使用myIndex和myIndex_v2搜索数据
参考:https://javasgl.github.io/elastic-search-reindex/
https://javasgl.github.io/use-alias-migrate-index/
最新文章
- 【.net 深呼吸】细说CodeDom(3):命名空间
- BizTalk动手实验(十七)ODBC适配器使用
- DOM的基本属性
- jQuery MiniUI开发系列之:安装部署
- Ubuntu 下安装 Oracle JDK
- Upgrading to Java 8——第四章 The Stream API
- SSIS ->;>; Parameter
- Asp.net原理(第一篇)
- Yslow-23条规则编辑
- ICE第二篇--一个";hello world";的简单例子
- 在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。
- 使用golang的slice来模拟栈
- JMeter登录总是提示用户名不能为空的解决
- linux screen 多任务后台执行
- python-day91--JS实现的ajax
- C++标准库头文件名字和C语言头文件名字的区别
- Docker Compose 配置文件详解
- Html中Select的增删改查排序,和jQuery中的常用功能
- Vagrant (1) —— 基本安装与配置(上)
- ALGO-3_蓝桥杯_算法训练_K好数(DP)