Fieldnamingстратегия с эластичным поиском данных Spring

#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();
    }

}