#elasticsearch #spring-data-elasticsearch #resthighlevelclient #field-names
Вопрос:
Я настраиваю приложение 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). Если, например, настроена стратегия SnakeCaseFieldNamingStrategy, свойство sampleProperty объекта будет сопоставлено с параметром sample_property в Elasticsearch. Стратегия FieldNamingStrategy применяется ко всем сущностям; ее можно перезаписать, установив в свойстве конкретное имя с @Field.
Вопрос в том, как я могу настроить клиент раз и навсегда?
Ответ №1:
просто переопределите 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();
}
}