使用spring数据elasticsearch 4.x实现基于java方法的序列化(不含jackson)

f1tvaqid  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(387)

我们正在运行一个java,spring应用程序,它使用spring数据elasticsearch索引到elasticsearch。最近我的团队已经从3.x版升级到4.x版。此升级将根据删除jacksonMap器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版本,getfullname()方法将被jackson序列化为默认值,用“fullname”字段填充elasticsearch索引。在版本4.x中,这个信息从我们的索引中删除了。4.x中的注解似乎只支持字段的序列化选项,而不支持方法。jackson注解(例如@jsoninclude)显然不再适用于这里。
如何使用spring数据ElasticSearch4.x将方法结果Map到elasticsearch中的字段?

bxpogfeg

bxpogfeg1#

您可以通过添加 @AccessType 带有 PROPERTY 方法的参数:

import org.springframework.data.annotation.AccessType;

@AccessType(AccessType.Type.PROPERTY)
String getFullName(){
  return firstName  + " " + lastName;
}

请注意,spring data elasticsearch也需要一个setter,因此您需要定义一个空方法:

void setFullName(String ignore){}

如果您对elasticsearch将为这个文本属性提供的默认Map很在行,那就是了。
我认为应该有可能使用这个没有设置器,除此之外,应该有可能把 @Field 方法上的注解,以便能够对此类属性进行适当的Map。
我为此创造了一个jira问题。

相关问题