如何使用Spring Data ElasticSearch为POJO定义ElasticSearch索引字段名

7
我将使用Spring Data ElasticSearch来执行CRUD操作。默认情况下,当一个被@Document注解的POJO被写入ElasticSearch索引时,索引字段名与POJO的Java属性名相同。 如何配置索引字段名不同? 例如,对于这个Document POJO:
@Document(indexName = "areas", type = "area")
public class Area {

    @Id
    private String id;
    private String countyName;
    private String postOfficeName;
    private String stateName;

如何配置才能使ElasticSearch中的索引字段序列化为county_name而不是countyName?


1
我已经找到了一种解决方法,通过在@Document注释的POJO中添加Jackson的@JsonProperty("county_name"),但这样做的缺点是失去了Spring Data DSL findBy...操作的强大功能,因为它们依赖于驼峰式Java属性名称。 - Fabien Coppens
@JsonProperty 的更多使用细节请参考 https://dev59.com/d1wX5IYBdhLWcg3wrA96 - Javaru
2个回答

1
作为 Spring-data-elasticsearch 使用 fasterxml 模块将 POJO 转换为 JSON 文档,您可以简单地使用以下代码:
@JsonProperty("country_name")
private String countryName

为了在elasticsearch索引中实现不同的字段名。

这是一种纯粹的策略,当您希望使用相同的DTO/POJO与其余响应一起使用时,其中您需要在POJO中使用的确切字段名称。无法为rest响应和elasticsearch请求生成具有不同字段名称的json。 - Eljah
不在我的情况下有帮助!注意:我使用 createIndex=false - Ram

-2

我认为你需要使用@Field注释的属性,我几乎确定是这样的。 请参见此处

根据文档:

@Field:应用于字段级别,定义字段的属性,大多数属性映射到相应的Elasticsearch映射定义(以下列表不完整,请查看注释Javadoc以获取完整参考): 名称:字段在Elasticsearch文档中表示的名称,如果未设置,则使用Java字段名称。 类型:字段类型,可以是Text、Keyword、Long、Integer、Short、Byte、Double、Float、Half_Float、Scaled_Float、Date、Date_Nanos、Boolean、Binary、Integer_Range、Float_Range、Long_Range、Double_Range、Date_Range、Ip_Range、Object、Nested、Ip、TokenCount、Percolator、Flattened、Search_As_You_Type。请参阅Elasticsearch映射类型。 日期类型的格式和模式定义。对于日期类型,必须定义格式。 存储:标志原始字段值是否应存储在Elasticsearch中,默认值为false。 分析器、搜索分析器、规范化器用于指定自定义分析器和规范化器。

我没有找到与字段名称相关的任何内容。 - fizmax
我猜 @Field 只用于 Spring Data MongoDB,如果你想要更改字段名称。 - Darsan
@Darsan 绝对不只是MongoDB,请看我的更新。 - andPat
@fizmax 如果你从我的链接开始谷歌一下,你就会找到你需要的东西。 - andPat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接