ElasticSearch Spring Data иногда генерирует индекс свойства false, а иногда не делает этого - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть следующий Бин с 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.

...