Проблема в том, что в вашем поле source_index
, т.е. latitude.lat_long
не соответствует ни одно из четырех допустимых представлений, поддерживаемых типом данных geo_point
.
В результате происходит сбой преобразования при попытке переиндексации.
Единственное применимое строковое представление будет иметь следующий формат "lat, lon"
, однако у вас будет [ "lat", "lon" ]
, который представляет собой не что иное, как массив строк.
Если представление в формате ниже, переиндексирование будет выполнено успешно.
"location" : {
"lat_long" : "49.266498, -122.998938"
]
}
В качестве решения вы можете выполнить следующие шаги:
Выполните приведенный ниже запрос, чтобы создать конвейер, который преобразует input format
из latitude.lat_long
в требуемый формат, как я упоминал выше
PUT _ingest/pipeline/my-pipeline-geo
{
"description" : "geo-point pipeline",
"processors" : [
{
"script": {
"lang": "painless",
"source": "ctx.temp = \"\"; for (def item : ctx.location.lat_long) { if(ctx.temp==\"\") { ctx.temp += item } else { ctx.temp = ctx.temp + ', ' + item} }"
}
},
{
"remove": {
"field": "location"
}
},
{
"set": {
"field": "location.lat_long",
"value": "{{temp}}"
}
},
{
"remove": {
"field": "temp"
}
}
]
}
Шаг 2: выполнить приведенный ниже запрос переиндексации
POST _reindex
{
"source": {
"index": "source_index"
},
"dest": {
"index": "dest_index",
"pipeline": "my-pipeline-geo"
}
}
Обратите внимание, как я использовал конвейер, созданный в Шаг 1 , на этапе переиндексации.
Вывод будет в формате, как я уже упоминал выше. Не спешите почитать о встроенном Ingestion API , который есть вasticsearch.
Проверьте, проверьте и дайте мне знать, как это происходит.