首页 > 解决方案 > 使用 Spring Data Elasticsearch 的 FieldNamingStrategy

问题描述

我正在配置一个 elasticsearch spring 应用程序,并按照我创建了这个 RestHighLevelClient 的文档:

@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {

        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()  
            .connectedTo("localhost:9200")
            .build();

        return RestClients.create(clientConfiguration).rest();                         
    }
}

现在我希望我的所有文档都具有snake_case作为命名策略,并且在文档中这就是我发现的:

无需进一步配置,Spring Data Elasticsearch 将使用对象的属性名称作为 Elasticsearch 中的字段名称。这可以通过在该属性上使用 @Field 注释来更改单个字段。

也可以在客户端(Elasticsearch 客户端)的配置中定义一个 FieldNamingStrategy。例如,如果配置了 SnakeCaseFieldNamingStrategy,则对象的属性 sampleProperty 将映射到 Elasticsearch 中的 sample_property。FieldNamingStrategy 适用于所有实体;可以通过在属性上使用 @Field 设置特定名称来覆盖它。

问题是,我怎样才能一劳永逸地配置客户端?

标签: elasticsearchspring-data-elasticsearchresthighlevelclientfield-names

解决方案


只需覆盖fieldNamingStrategy()配置类中的方法:

@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {

        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()  
            .connectedTo("localhost:9200")
            .build();

        return RestClients.create(clientConfiguration).rest();                         
    }

    @Override
    protected FieldNamingStrategy fieldNamingStrategy() {
        return new SnakeCaseFieldNamingStrategy();
    }

}

推荐阅读