Небольшая техническая справка: Spring Data Elasticsearch (в этой версии) внутренне использует реализацию интерфейса EntityMapper
для преобразования сущностей в формат JSON, необходимый для Elasticsearch и обратно.
The Spring Автоконфигурация при загрузке создает экземпляр ElasticsearchRestTemplate, который внутренне использует DefaultEntityMapper
, который является просто тонкой оболочкой вокруг Джексона. Эта реализация вызывает много проблем, одна из них вас ударила, и это пользовательское именование свойств.
Итак, начиная с версии 3.2 доступна альтернативная реализация, ElasticsearchEntityMapper
, но это необходимо явно настроить. Вам потребуется добавить класс конфигурации, подобный этому, в ваше приложение:
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Override
@Primary
@Bean
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
return RestClients.create(clientConfiguration).rest();
}
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
}
Обратите внимание, что здесь хост Elasticsearch предоставляется без префикса http: // , вы можете захотеть чтобы добавить другое свойство в вашу конфигурацию и автоматически связать его со свойством $Value
в этот класс конфигурации.
Примечание:
Начиная со следующей основной версии (4.0 ), старый EntityMapper на основе Jackson больше не будет доступен, и эта пользовательская конфигурация EntityMapper не понадобится.