У меня есть следующий Бин с Spring Data и ElasticSearch:
@Document(indexName = "<wishotels_#{elasticDynamicEnvironmentName.getName()}_availlog-{now/d}>", type = "availlog_#{elasticDynamicEnvironmentName.getName()}")
public class AvailLog {
@Id
private String id;
@Field(type = FieldType.Date, index = true)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private Date timestamp;
@Field(type = FieldType.Long, index = false)
private int hotelsNumber;
@Field(type = FieldType.Long, index = false)
private long responseTime;
@Field(type = FieldType.Long, index = false)
private long combinationResponseTime;
@Field(type = FieldType.Object, index = true)
private ProviderDao provider;
@Field(type = FieldType.Object, index = true)
private ServerDao server;
У меня есть другой класс, который расширяет ElasticSearchCRUDRepository.Когда я выполняю приложение, иногда для этого индекса создается сопоставление со свойством index = false, например:
"wishotels_pro_availlog-2018.09.13": {
"mappings": {
"availlog_pro": {
"properties": {
"combinationResponseTime": {
"type": "long",
"index": false
},
"hotelsNumber": {
"type": "long",
"index": false
},
"provider": {
"properties": {
"code": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"subProviderCode": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"responseTime": {
"type": "long",
"index": false
},
"server": {
"properties": {
"machine": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"port": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"timestamp": {
"type": "date"
}
}
}
}
}
И иногда оно генерируется без этих элементов.Поэтому, когда я запускаю приложение и оно пытается сохранить данные в индексе, приложение выдает следующее исключение:
Exception: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'availLogRepository': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Mapper for [combinationResponseTime] conflicts with existing mapping in other types:
[mapper [combinationResponseTime] has different [index] values, mapper [combinationResponseTime] has different [analyzer]]
Я думаю, это зависит от того, имеет ли приложение отображение со значением индекса вfalse или не имеет элемента index.Вы знаете, как решить эту проблему?Моя версия упругого поиска - 5.2.2, а версия данных упругого поиска - 3.0.6.