You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
    }
}

全局对所有索引生效

在配置文件(如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:45:05