如何使用 Spring Data Elasticsearch 为字符串字段制作自定义转换器?

How to make a custom converter for a String field using Spring Data Elasticsearch?

我在我的项目中使用 Spring Data Elasticsearch。我有一个这样的class,

@Document("example")
class Example {

@Id
private String id;
private String name;
private String game;
private String restField;
}

我需要的是,每当我将 Example 对象保存到 elasticsearch 时,我都会删除一个值。但是当我从 elasticsearch 获取数据时,我需要附加删除的值。

save(Example example) {
   example.setRestField(example.getRestField().replace("***", ""));
   exampleRepository.save(example);
}

get(String id) {
   Example example = exampleRepository.findById(id);
   example.getRestField().concat("***");
   return example;
}

我现在就是按照上面的方法做的。但是我们可以为此使用自定义转换器吗?我检查了 Spring Data Elasticsearch 的转换器示例,但这些示例适用于不同的不同对象。如何仅为这个特定的字符串字段 restField 创建自定义转换器?我不想将此转换器应用于其他字符串字段。

目前没有更好的解决办法。为 Spring Data Elasticsearch 注册的转换器在 class 和字符串之间来回转换。为您的案例注册转换器将转换每个实体的 any 字符串 属性。

我之前考虑过属性的自定义转换器,我创建了 a ticket for this

编辑 2021 年 11 月 5 日:

https://github.com/spring-projects/spring-data-elasticsearch/pull/1953 一起实现,将从 4.3.RC1 开始可用。