Spring Data ElasticSearch7.9.3给已有索引新增字段自定义分析器不生效问题
问题原因
你遇到的问题是Spring Data Elasticsearch 4.2.x版本的默认映射更新逻辑导致的:只有在新建索引的时候,框架才会完整读取POJO中@Field注解的所有配置(包括自定义分析器、分词器相关参数)生成映射;针对已存在索引的新增字段,默认不会主动同步注解中的自定义配置,只会使用ES默认的动态映射规则生成字段结构,所以才会出现只有默认text+keyword子字段的情况。
可行解决方案
方案1:启动时主动同步映射
新增一个应用启动完成的监听器,主动调用ElasticsearchOperations的API强制同步最新映射,后续新增字段无需手动处理:import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component public class EsMappingSyncConfig { @Resource private ElasticsearchOperations elasticsearchOperations; @EventListener(ApplicationReadyEvent.class) public void syncEsMapping() { elasticsearchOperations.indexOps(User.class).putMapping(); } }方案2:临时手动同步(适合生产环境已上线场景)
直接执行你提到的PUT更新映射请求即可,框架后续不会覆盖已经存在的正确映射配置:PUT /users/_mapping { "properties": { "bioAuto" : { "type" : "text", "analyzer" : "autocomplete_whitespace_only", "search_analyzer" : "autocomplete_search" } } }
补充说明
你删除索引重启后功能恢复正常的原因是:索引重建时框架会完整读取@Setting、@Field的所有配置生成完整映射,不属于动态新增字段场景,所以符合预期。
内容的提问来源于stack exchange,提问作者artyom.poteshkin98
相关产品推荐
相关产品推荐

