# Проблема с заливкой данных. Проблема с преобразованием типов

**URL:** https://discuss.elastic.co/t/topic/169200
**Category:** Вопросы на русском языке
**Created:** [February 20, 2019, 12:05pm UTC](https://discuss.elastic.co/t/topic/169200 "2019-02-20T12:05:54Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [February 20, 2019, 12:05pm UTC](https://discuss.elastic.co/t/topic/169200/1 "2019-02-20T12:05:54Z")

</div>

Есть заранее созданный индекс. В нем есть поле fullprice. В маппинге указан у него тип double.

При загрузке данных, периодически появляется ошибка  
java.lang.IllegalArgumentException: mapper [fullprice] cannot be changed from type [long] to [float]

в поле fullprice записывается значение 100000.00  
Вопрос в чем:

1. почему не может преобразовать?
2. почему пишет что не может преобразовать в тип float если тип стоит double
3. как побороть данную проблему?

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [February 20, 2019, 3:21pm UTC](https://discuss.elastic.co/t/topic/169200/2 "2019-02-20T15:21:47Z")

</div>

Как маппинг для этого поля выглядит?

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [February 21, 2019, 7:40am UTC](https://discuss.elastic.co/t/topic/169200/3 "2019-02-21T07:40:31Z")

</div>

```
    "fullprice": {
      "type": "double"
    }
```

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [February 21, 2019, 3:16pm UTC](https://discuss.elastic.co/t/topic/169200/4 "2019-02-21T15:16:28Z")

</div>

Чем вы загружаете данные? Похоже, что это приложение пытается поменять маппинг для этого поля, однако странно что оно у вас `double` в маппинге. Судя по ошибке, в индексе, с которым вы работаете, оно у вас `long`.

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [February 21, 2019, 3:35pm UTC](https://discuss.elastic.co/t/topic/169200/5 "2019-02-21T15:35:43Z")

</div>

так в том то и дело, что никто маппинг не меняет, в индексе тип double, а при вставке ругается что не может long во float преобразовать... при чем после ошибки, если заново залить этот же Json в БД, то ошибки не будет!

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [February 21, 2019, 3:47pm UTC](https://discuss.elastic.co/t/topic/169200/6 "2019-02-21T15:47:53Z")

</div>

Какая версия? Можно текст ошибки целиком со стеком посмотреть?

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [February 22, 2019, 7:27am UTC](https://discuss.elastic.co/t/topic/169200/7 "2019-02-22T07:27:13Z")

</div>

Версия 6.4.3

Ошибка:

```auto
Caused by: java.lang.IllegalArgumentException: mapper [fullprice] cannot be changed from type [long] to [float] at
org.elasticsearch.index.mapper.MappedFieldType.checkTypeName(MappedFieldType.java:141) at
org.elasticsearch.index.mapper.MappedFieldType.checkCompatibility(MappedFieldType.java:153) at
org.elasticsearch.index.mapper.FieldTypeLookup.validateField(FieldTypeLookup.java:157) at
org.elasticsearch.index.mapper.FieldTypeLookup.copyAndAddAll(FieldTypeLookup.java:108) at
org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:440) at
org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:355) at
org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:287) at
org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.applyRequest(MetaDataMappingService.java:312) at
org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.execute(MetaDataMappingService.java:229) at
org.elasticsearch.cluster.service.MasterService.executeTasks(MasterService.java:639) at
org.elasticsearch.cluster.service.MasterService.calculateTaskOutputs(MasterService.java:268) at
org.elasticsearch.cluster.service.MasterService.runTasks(MasterService.java:198) at
org.elasticsearch.cluster.service.MasterService$Batcher.run(MasterService.java:133) at
org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) at
org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) at
org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:624) at
org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:244) at
org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:207) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)

```

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [February 22, 2019, 4:10pm UTC](https://discuss.elastic.co/t/topic/169200/8 "2019-02-22T16:10:52Z")

</div>

Я не понимаю, как такая ошибка возможна при условии что

> Есть заранее созданный индекс. В нем есть поле fullprice. В маппинге указан у него тип double.

Вы уверены что маппинг заранее создается правильно и для правильного типа/индекса?

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [February 22, 2019, 4:43pm UTC](https://discuss.elastic.co/t/topic/169200/9 "2019-02-22T16:43:42Z")

</div>

Да. Моппинги создаём заранее, иначе возникали коллизии при добавлении. Причём если ещё раз попытаться запихать Json который не прошёл, он успешно потом добавляется

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [February 26, 2019, 7:46am UTC](https://discuss.elastic.co/t/topic/169200/10 "2019-02-26T07:46:23Z")

</div>

какие то мысли есть по данной проблеме?)

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [March 6, 2019, 12:01pm UTC](https://discuss.elastic.co/t/topic/169200/11 "2019-03-06T12:01:40Z")

</div>

Обновили версию БД до 6.6.1

ошибка все так же имеет место быть.

версия  
{  
"name" : "h2VWSmu",  
"cluster\_name" : "elasticsearch",  
"cluster\_uuid" : "WBanQVMMSR6n0SgfKweehg",  
"version" : {  
"number" : "6.6.1",  
"build\_flavor" : "default",  
"build\_type" : "deb",  
"build\_hash" : "1fd8f69",  
"build\_date" : "2019-02-13T17:10:04.160291Z",  
"build\_snapshot" : false,  
"lucene\_version" : "7.6.0",  
"minimum\_wire\_compatibility\_version" : "5.6.0",  
"minimum\_index\_compatibility\_version" : "5.0.0"  
},  
"tagline" : "You Know, for Search"  
}

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [March 6, 2019, 1:50pm UTC](https://discuss.elastic.co/t/topic/169200/12 "2019-03-06T13:50:16Z")

</div>

вот ссылка на свежий стек  
[https://xpaste.pro/p/c54a807cd874cc56a11f863251188135](https://xpaste.pro/p/c54a807cd874cc56a11f863251188135)

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [March 6, 2019, 4:50pm UTC](https://discuss.elastic.co/t/topic/169200/13 "2019-03-06T16:50:00Z")

</div>

Покажите, пожалуйста, как выглядит mapping для индекса `purchase_plan_44`?

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [March 7, 2019, 7:13am UTC](https://discuss.elastic.co/t/topic/169200/14 "2019-03-07T07:13:44Z")

</div>

[http://xpaste.pro/p/f36e31e49392ee611e472864359b8aa8](http://xpaste.pro/p/f36e31e49392ee611e472864359b8aa8)

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [March 7, 2019, 2:27pm UTC](https://discuss.elastic.co/t/topic/169200/15 "2019-03-07T14:27:53Z")

</div>

Как вы получили этот маппинг? Это из команды, которую вы запускаете для создания этого индекса? Я хотел бы взглянуть на реальный маппинг для этого конкретного индекса `purchase_plan_44`, полученный командой `GET purchase_plan_44`.

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [March 7, 2019, 2:53pm UTC](https://discuss.elastic.co/t/topic/169200/16 "2019-03-07T14:53:24Z")

</div>

Присланный маппинг был получен через Kaizer.

Вот с помощью команды

[https://xpaste.pro/p/b7d3717bfc04f2fd016bafe014ebbbf9](https://xpaste.pro/p/b7d3717bfc04f2fd016bafe014ebbbf9)

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [March 7, 2019, 3:23pm UTC](https://discuss.elastic.co/t/topic/169200/17 "2019-03-07T15:23:10Z")

</div>

Маппинг, который мы мне прислали не из того индекса, с которым произошла ошибка, которую вы присылали ранее. Так что либо эти два индекса с одним и тем же именем находятся в разных кластерах, либо кто-то удалил индекс с именем `purchase_plan_44` после того, как произошла ошибка и создал другой индекс с таким же именем.

Скорее всего, вы думаете, что вы создаете индекс заранее, но некоторые данные все-таки проскакивают до того, как вы создали индекс, вызывают эту ошибку и после этого вы пересоздаете индекс.

Чтобы проверить эту теорию, поищите по логу строку purchase\_plan\_44. Когда индекс создается вместе с маппингом, то лог на мастере должен выглядеть так:

```auto
[INFO][o.e.c.m.MetaDataCreateIndexService] [h2VWSmu] [purchase_plan_44] creating index, cause [api], templates [], shards [5]/[1], mappings [purchase]

```

Если индекс создался автоматически из-за bulk индексации, то лог будет выглядеть так:

```auto
[INFO][o.e.c.m.MetaDataCreateIndexService] [h2VWSmu] [purchase_plan_44] creating index, cause [auto(bulk api)], templates [], shards [5]/[1], mappings []

```

Обратите внимание на `cause`. `api` - означает, что индекс создали вы, если там `auto(....)` то значит записи начали поступать, до того, как вы создали индекс. И обратите внимание на `mappings [...]`.

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [March 7, 2019, 4:04pm UTC](https://discuss.elastic.co/t/topic/169200/18 "2019-03-07T16:04:48Z")

</div>

Я перед посылкой маппинга прислал свежий лог по ошибке с purchase\_plan\_44. Просто данные ошибки появляются не только на этом индексе. И к только я увидел в логе ошибку, я просто послал новую

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [March 7, 2019, 4:08pm UTC](https://discuss.elastic.co/t/topic/169200/19 "2019-03-07T16:08:01Z")

</div>

Вы можете прислать ошибку и маппинг, которые соответствовали бы друг другу?

---

<div class="post-metadata">

### Author: ![andy4195](https://avatars.discourse-cdn.com/v4/letter/a/e68b1a/32.png) [@andy4195](https://discuss.elastic.co/u/andy4195)
#### Post date: [March 7, 2019, 4:20pm UTC](https://discuss.elastic.co/t/topic/169200/20 "2019-03-07T16:20:37Z")

</div>

Так последний маппинг и последняя ошибка соответствуют

[Next page](https://discuss.elastic.co/t/topic/169200.md?page=2)
