使用Spring Data ElasticSearch 4.x(不带Jackson)进行基于方法的序列化



我们正在运行一个Java、Spring应用程序,该应用程序使用Spring Data ElasticSearch对ElasticSearch进行索引。最近,我的团队已经从3.x版本升级到4.x版本。根据https://docs.spring.io/spring-data/elasticsearch/docs/4.0.0.RELEASE/reference/html/#elasticsearch.mapping本文件包含以下报价:

使用MappingElasticsearchConverter现在涵盖了所有这些情况。

然而,我还没有找到解决以下问题的方法。我们过去在ElasticSearch中建立某些字段,方法是在我们的模型中包含该模型字段上的逻辑函数。例如:

public class Person {
private String firstName;
private String lastName;
String getFullName(){
return firstName  + " " + lastName;
}
}

使用3.x版本,Jackson会将getFullName((方法序列化为默认值,并用"fullName"字段填充我们的ElasticSearch索引。在4.x版本中,我们的索引中没有包含此信息。4.x中的注释似乎只支持字段的序列化选项,而不支持方法。Jackson注释(例如@JsonInclude(显然不再适用于此。

如何使用SpringDataElasticSearch4.x将方法结果映射到ElasticSearch中的字段?

您可以通过将带有PROPERTY参数的@AccessType注释添加到方法中来实现这一点:

import org.springframework.data.annotation.AccessType;
@AccessType(AccessType.Type.PROPERTY)
String getFullName(){
return firstName  + " " + lastName;
}

请注意,Spring Data Elasticsearch也需要一个setter,因此您需要定义一个空方法:

void setFullName(String ignore){}

如果你擅长Elasticsearch为这个文本属性提供的默认映射,那就是它

我认为应该可以在没有setter的情况下使用它,除此之外,应该可以在方法上放置@Field注释,以便能够为这些属性提供适当的映射。

我为此创建了一个Jira问题。

编辑1.10.2022:

现在已经实现了,并将在下一个版本(5.0.RC(中提供

最新更新