Hibernate Search对接Elasticsearch后端如何禁用_source存储
Hibernate Search 6.0.3 禁用Elasticsearch _source存储配置方案
ES 的_source字段默认会存储写入索引的所有字段原始数据,你可以通过Hibernate Search提供的Mapping自定义能力关闭该配置,具体操作如下:
配置步骤
1. 实现自定义Mapping配置类
首先创建_source禁用的自定义逻辑类:
import com.google.gson.JsonObject; import org.hibernate.search.backend.elasticsearch.mapping.ElasticsearchMappingCustomizer; // Spring Boot 环境下加@Component注解直接注册 // 非Spring环境需通过SPI方式注册:在META-INF/services/org.hibernate.search.backend.elasticsearch.mapping.ElasticsearchMappingCustomizer文件中写入当前类的全限定名 public class SourceDisablingCustomizer implements ElasticsearchMappingCustomizer { @Override public void customize(JsonObject mapping) { JsonObject sourceConfig = mapping.getAsJsonObject("_source"); if (sourceConfig == null) { sourceConfig = new JsonObject(); mapping.add("_source", sourceConfig); } sourceConfig.addProperty("enabled", false); } }
2. 绑定配置到Hibernate Search
全局对所有索引生效
在配置文件(如application.properties/hibernate.properties)中添加如下配置:
hibernate.search.backend.schema_management.mapping_customizer = source-disabling-customizer
仅对单个索引生效
不需要加全局配置,直接在对应实体的索引注解上绑定自定义配置即可:
@Entity @Indexed @Mapping(customizer = "source-disabling-customizer") public class YourBusinessEntity { // 原有实体字段、索引注解配置 }
重要注意事项
- 禁用
_source之后,ES原生的reindex、部分字段更新、原始数据直接查询能力都会失效,Hibernate Search的字段projection也无法正常返回数据,仅当你后续只会用搜索结果的ID去Postgres数据库查询完整数据时,才适合使用该配置。 - 配置完成后需要重新生成索引才会生效,已存在的索引不会自动更新mapping,需要手动删除旧索引再触发Hibernate Search的schema初始化,或者调用schema管理接口重新创建索引。
- 上述配置完全适配Hibernate Search 6.0.3版本,不需要额外升级依赖。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

