Как заставить Elasti c сохранить больше десятичных чисел с плавающей запятой - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть некоторые координаты, которые я передаю Elasticsearch из Logsta sh, но Elasti c хранит только 3 знака после запятой, поэтому в случае с координатами я полностью теряю местоположение.

Когда я отправляю данные из Logsta sh, я вижу, что он получил правильное значение:

{
          "nasistencias" => 1,
         "tiempo_demora" => "15",
                  "path" => "/home/elk/data/visits.csv",
                 "menor" => "2",
               "message" => "5,15,Parets del Vallès,76,0,8150,41.565505,2.234999575,LARINGITIS AGUDA,11/3/17 4:20,1,38,1,2,POINT(2.2349995750000695 41.565505000000044)",
          "id_poblacion" => 76,
            "@timestamp" => 2017-03-11T04:20:00.000Z,
             "poblacion" => "Parets del Vallès",
            "edad_valor" => 0,
             "patologia" => "LARINGITIS AGUDA",
                  "host" => "elk",
              "@version" => "1",
    "Geopoint_corregido" => "POINT(2.2349995750000695 41.565505000000044)",
               "id_tipo" => 1,
                "estado" => "5",
                    "cp" => 8150,
              "location" => {
        "lon" => 2.234999575,               <- HERE
        "lat" => 41.565505                  <- AND HERE
    },
           "id_personal" => 38,
                 "Fecha" => "11/3/17 4:20"
}

Но затем я получаю его на Кибане следующим образом:

enter image description here

Я выполняю преобразование следующим образом:

mutate {
    convert => { "longitud_corregida" => "float" }
    convert => { "latitude_corregida" => "float" }
}
mutate {
  rename => {
      "longitud_corregida" => "[location][lon]"
      "latitude_corregida" => "[location][lat]"
  }
}

Как сохранить все десятичные дроби? При геолокации одно десятичное число может вернуть неправильный город.

Другой вопрос (связанный)

Я добавляю данные в документ CSV следующим образом:

# echo "5,15,Parets del Vallès,76,0,8150,"41.565505","2.234999575",LARINGITIS AGUDA,11/3/17 4:20,1,38,1,2,POINT(2.2349995750000695 41.565505000000044)" >> data/visits.csv

Но в оригинальном документе вместо точек есть комы для координат. как это:

# echo "5,15,Parets del Vallès,76,0,8150,"41,565505","2,234999575",LARINGITIS AGUDA,11/3/17 4:20,1,38,1,2,POINT(2.2349995750000695 41.565505000000044)" >> data/visits.csv

Но проблема заключалась в том, что он получал кому в качестве разделителя полей, и все данные отправлялись в Elasticsearch неправильно. Как здесь:

enter image description here

Здесь широта была 41,565505, но эта кома заставила ее понимать 41 как широту и 565505 как долгота. Я изменил кому на точку, и не уверен, понимает ли float комы и точки, или просто комы. У меня вопрос, не ошибся ли я, изменив кому на точку? Есть ли лучший способ исправить это?

1 Ответ

1 голос
/ 03 февраля 2020

Создайте отображение GEO-Point для полей широты и долготы. Это приведет к более точному и внутренне оптимизированному хранилищу в ES и позволит вам более изощренно GEO-Queries .

Имейте в виду, что вам нужно будет переиндексировать данные, так как впоследствии изменения в отображении невозможны (если уже есть документы с полями для изменения)

Ноль время простоя:

  1. Создать новый индекс с оптимизированным отображением (извлечь его из текущего и внести изменения вручную)
  2. Переиндексировать данные (хотя бы некоторые документы) для проверки)
  3. Снова очистите новый индекс
  4. Измените назначение logsta sh на новый индекс (рассмотрите возможность использования псевдонимов)
  5. Переиндексируйте старые данные в новый индекс
...