elasticsearch - 如何强制Elastic从 float 中保留更多小数

标签 elasticsearch logstash kibana

我有一些坐标是从Logstash传递给Elasticsearch的,但是Elastic只保留3个小数,因此就坐标而言,我完全失去了位置。

从Logstash发送数据时,可以看到它具有正确的值:

{
          "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"
}

但是随后,我在Kibana上获得了如下代码:

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可以理解昏迷和点,或者仅仅是昏迷。我的问题是,按点更改昏迷是否做错了?有没有更好的方法来纠正此问题?

最佳答案

为纬度/经度字段创建一个GEO-Point映射。这将导致ES中更精确和内部优化的存储,并允许您使用更复杂的GEO-Queries

请记住,由于之后无法更改映射,因此您需要重新索引数据(如果已经存在需要更改字段的文档)

零停机方法:

  • 创建具有优化映射的新索引(从当前索引派生,并手动进行更改)
  • 重新索引数据(至少需要一些文档进行验证)
  • 再次清空新索引
  • 将logstash目标更改为新索引(考虑使用别名)
  • 将旧数据重新索引为新索引
  • 关于elasticsearch - 如何强制Elastic从 float 中保留更多小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038257/

    相关文章:

    elasticsearch - 如何在不对Kibana进行任何汇总的情况下将数据制成表格?

    java - Elasticsearch 中的聚合

    database - ElasticSearch "match_all"慢, "from"> 1M,+10M 文档

    elasticsearch - Kibana可视化-状态页面(如Nagios)

    elasticsearch - 在Logstash中获取日期格式的时间戳记,日期和时间字段

    elasticsearch - 弹性-选择前5个匹配后进行过滤

    mysql - 使用 Elasticsearch/Logstash/Kibana 的数据库 SQL

    python - 为什么 “sort”出现在elasticsearch的这个JSON中?

    elasticsearch - 如何使用 Logstash 从 S3 解析数据并推送到 Elastic Search,然后推送到 Kibana

    elasticsearch - 无法删除 grok 过滤器不匹配的事件,logstash, Elasticsearch