Campo Geolocalização no Elastic como String

Bom dia a todos, estou tentando converter o campo "Localizacao" no Elastic através do kibana mais não estou tendo sucesso, alguém pode me dar uma força pra eu entender onde estou errando.

Segue parametros de envio no Logstash
input {
rabbitmq {
(****dados de envio rabbitmq)
}
}

filter {
csv{
separator => " "
columns => ["Data", "Distancia", "Local", "Sensor", "Latitude", "Longitude"]
convert => {
"Distancia" => "float"
"Latitude" => "float"
"Longitude" => "float" }
}

mutate {
remove_field => ["message", "@version" ]
add_field => ["Localizacao", "%{Latitude},%{Longitude}"]
}
}

output {
elasticsearch {
hosts => "http://localhost:9200"
index => "sensores"
}
}

Com esse envio no Kibana está obtendo o campo como string e não como Float.... Tentei inserir um convert float também não tive resultado... Segue abaixo minha tentativa de conversão no Kibana

PUT /_index_template/sensores/
{
"template": "sensores",
"mappings": {
"properties": {
"Localizacao": {
"type": "geo_point"
},
"entry": {
"type": "keyword"
},
"exit_only": {
"type": "keyword"
}
}
}
}

Executando esse PUT na área de DEV TOOLS está ocorrendo o seguinte erro:

{
"error" : {
"root_cause" : [
{
"type" : "x_content_parse_exception",
"reason" : "[2:15] [index_template] template doesn't support values of type: VALUE_STRING" }],
"type" : "x_content_parse_exception", "reason" : "[2:15] [index_template] template doesn't support values of type: VALUE_STRING" },
"status" : 400
}

Será que alguém consegue me ajudar obrigado.

Olá Leonardo,

Como conversamos no Facebook, você precisa criar o index /sensores anteriormente definindo o campo Localicazacao como geo_point pois este tipo não é detectado automaticamente. Neste caso, você precisa deletar o index, cria-lo novamente com a definição correta e reindexar os dados. Você conseguiu fazer isso?

Abs!

Então, quase.... o que eu fiz foi o seguinte... criei um novo índice como você me informou, com o nome de "geolocal" e os parâmetros corretos para criar o campo como "geo_point" na na minha variável "Localizacao" então parei o LOGSTASH criei um novo arquivo de configuração apontando para este índice e aparentemente deu certo. O campo já está como geo_point.....Maravilha menos um problema.

Agora como eu importo o que está no índice "sensores" para este novo índice que eu criei?

Então existe um index aberto, com os dados atuais, chamado geolocal e um em snapshot chamado sensores?

Correto, como informei lá pelo Face fiz um backup antes de iniciarmos, se quiser encerro esse tópico como solucionado e abro outro sobre o backup, para ficar organizado, já que o problema principal que era a criação do campo foi resolvido.

Não precisa, podemos continuar por aqui. Só queria mesmo confirmar a situação :wink:.

Bem, então estou assumindo que a estrutura dos documentos indexados em sensores é exatamente igual a estrutura dos documentos indexados em geolocal. Apenas mesmo que o esquema do index sensores é diferente (e errado) comparado ao geolocal. Sendo assim bastar apenas reindexar de um index para o outro, o que pode ser feito com a Reindex API, por exemplo (assumindo que você fez o restore do snapshot com o index sensores):

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "sensores"
  },
  "dest": {
    "index": "geolocal"
  }
}

Essa chamada vai retornar na mesma hora e uma task de reindexação vai ser criada em background. O tempo de reindexação vai depender da quantidade de dados e hardware disponível. O resultado da chamada vai retornar um campo task que você pode usar para verificar o progresso com GET .tasks/_doc/${task}

Abs!

Por algum motivo ele não reindexou 10 documentos conforme imagem abaixo:

Sabe dizer se há algum motivo pra isso?

Qual o resultado de GET .tasks/_doc/${task}? (Por favor, lembre-se de formatar corretamente o JSON, se não a leitura é difícil, você pode usar Markdown aqui)

Não exibiu nada...

Quando eu me referi a ${task} esse valor era para ter sido substituído pela string retornada no campo task quando a task de reindexação foi criada :wink:.

Mas não tem problema, pegue o resultado de GET .tasks/_search que também serve.

Putz.... Entendi.... rsrsr.... agora já foi...
Aparentemente está tudo certo só lá na contagem de documentos que não está mostrando correto mas pelo visto a reindexação deu OK, segue resultado abaixo:

{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : ".tasks",
"_type" : "task",
"id" : "Ted-QnTThCplWhn9G1FQQ:4458249",
"_score" : 1.0,
"source" : {
"completed" : true,
"task" : {
"node" : "Ted
-QnTThCplWhn9G1FQQ",
"id" : 4458249,
"type" : "transport",
"action" : "indices:data/write/reindex",
"status" : {
"total" : 1086617,
"updated" : 0,
"created" : 1086617,
"deleted" : 0,
"batches" : 1087,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0
},
"description" : "reindex from [sensores] to [geolocal][_doc]",
"start_time_in_millis" : 1598976381867,
"running_time_in_nanos" : 78858204651,
"cancellable" : true,
"headers" : { }
},
"response" : {
"took" : 78660,
"timed_out" : false,
"total" : 1086617,
"updated" : 0,
"created" : 1086617,
"deleted" : 0,
"batches" : 1087,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled" : "0s",
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until" : "0s",
"throttled_until_millis" : 0,
"failures" :
}
}
},
{
"_index" : ".tasks",
"_type" : "task",
"id" : "Ted-QnTThCplWhn9G1FQQ:4480519",
"_score" : 1.0,
"source" : {
"completed" : true,
"task" : {
"node" : "Ted
-QnTThCplWhn9G1FQQ",
"id" : 4480519,
"type" : "transport",
"action" : "indices:data/write/reindex",
"status" : {
"total" : 1086889,
"updated" : 0,
"created" : 1086889,
"deleted" : 0,
"batches" : 1087,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0
},
"description" : "reindex from [sensores] to [geolocal][_doc]",
"start_time_in_millis" : 1598977278217,
"running_time_in_nanos" : 89437829115,
"cancellable" : true,
"headers" : { }
},
"response" : {
"took" : 89437,
"timed_out" : false,
"total" : 1086889,
"updated" : 0,
"created" : 1086889,
"deleted" : 0,
"batches" : 1087,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled" : "0s",
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until" : "0s",
"throttled_until_millis" : 0,
"failures" :
}
}
}
]
}
}

Obrigado pela força e Feliz Aniversário... Até mais... muito obrigado mesmo, valeu.

Pelo resultado da consulta me parece que a reindexação foi ok mesmo! Talvez você tenha visto o contador em um momento que a task ainda não tinha terminado?

Por nada e obrigado!