【问题标题】:How to define ElasticSearch index field names for a POJO using Spring Data ElasticSearch如何使用 Spring Data ElasticSearch 为 POJO 定义 ElasticSearch 索引字段名称
【发布时间】:2015-05-04 12:43:45
【问题描述】:

我正在使用 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?

【问题讨论】:

  • 我通过在@Document 注释 POJO 中添加 Jackson 的 @JsonProperty("county_name") 找到了一种解决方法,但这具有失去 Spring Data 的 DSL findBy... 操作功能的缺点因为它们依赖于驼峰式 Java 属性名称。
  • @JspnProperty 使用的更多细节在stackoverflow.com/questions/33537229/… 中讨论

标签: elasticsearch spring-data spring-data-elasticsearch


【解决方案1】:

我认为您必须使用@Field 注释的属性,我几乎可以肯定这一点。 请参阅here

来自文档:

@Field:在字段级别应用并定义 字段,大部分属性映射到各自的 Elasticsearch 映射定义(以下列表不完整,请查看 注解 Javadoc 以供完整参考):

name:字段的名称,它将在 Elasticsearch文档,如果不设置,则使用Java字段名。

type:字段类型,可以是Text、Keyword、Long、Integer中的一种, 短整型、字节型、双精度型、浮点型、Half_Float、Scaled_Float、日期、 Date_Nanos, Boolean, Binary, Integer_Range, Float_Range, Long_Range, Double_Range、Date_Range、Ip_Range、对象、嵌套、Ip、TokenCount、 渗滤器,扁平化,Search_As_You_Type。请参阅 Elasticsearch 映射 类型

日期类型的格式和模式定义。格式必须是 为日期类型定义。

store:标记原始字段值是否应存储在 Elasticsearch,默认值为 false。

analyzer, searchAnalyzer, normalizer 用于指定自定义自定义 分析器和归一化器。

【讨论】:

  • 我没有找到任何与字段名称相关的内容
  • 我猜@Field 只用于 spring 数据 mongodb,如果你想更改字段名称。
  • @Darsan 绝对不仅仅是 MongoDB。请看我的更新
  • @fizmax 如果你从我的链接开始用谷歌搜索一下,你会找到你需要的。
【解决方案2】:

由于 Spring-data-elasticsearch 使用 fastxml 模块将 POJO 转换为 json 文档,您可以简单地使用,

@JsonProperty("country_name")
private String countryName

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

【讨论】:

  • 这是一个纯粹的策略,当您希望它使用与其余响应相同的 DTO/POJO 时,您需要在 POJO 中使用的字段名称。无法为其余响应和弹性​​搜索请求生成具有不同字段名称的 json
  • 对我没有帮助!注意:我使用createIndex=false
猜你喜欢
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多