elasticsearch - 使用 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 设置特定名称来覆盖它。
问题是,我怎样才能一劳永逸地配置客户端?
解决方案
只需覆盖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();
}
}
推荐阅读
- odata - 带有命名空间的 OData 操作(通过 VS2019 中的 OData 连接服务)
- sql-server - 如何查看 SQL Server 事务日志?
- angular - angular.json 中带有“inject: false”的样式不会得到散列
- javascript - 静态站点、服务器端计算、Nextjs、WordPress
- objective-c - 如何以编程方式读取安全和隐私/自动化设置?
- node.js - MongoDB,NodeJs - 引用模式时遇到问题
- python - 将参数添加到 Python Intake LocalCatalogEntry
- javascript - 在 Firestore 中运行事务
- awk - 获取匹配模式部分的名称
- lua - 计时器脚本不循环(Roblox Lua)