如何索引包含稀疏填充的geo_point数据的嵌套JSON?

时间:2019-05-13 17:49:52

标签: json elasticsearch

我正在运行Elasticsearch v6.7.2,并希望索引如下所示的JSON:

{
    "src": {
        "ip": "10.0.1.32"
    },
    "dst": {
        "ip": "74.6.168.73",
        "location": {
            "lat": 37.751,
            "lon": -97.822
        }
    },
    "in": 197.0,
    "out": 76.0,
    "timestamp": 1.557746197E12
}

如您所见,JSON是嵌套的。 lat / lon值是location的属性,而这些属性又属于src(源)或dst(目标)。

如果源或目标IP地址的地理位置数据不存在,则JSON中缺少location属性。例如,上例中的源地址是私有IP,在IP地理位置服务中没有关联的条目。

我试图弄清楚如何在Elastic中创建映射,以便将时间戳字段(Unix millis)和位置存储/索引为正确的类型,以便可以对其进行搜索。位置应存储为geo_point类型。

几件事让我感到困惑:

  1. JSON是嵌套的,因此映射定义需要考虑 这个。
  2. 该位置稀疏。希望它能处理 缺少属性的JSON。

从Kibana可以看到的“自动”索引器似乎无法识别{"location": {"lat": ..., "lon": ...}}geo_point

有人知道如何为该数据创建映射吗?

1 个答案:

答案 0 :(得分:0)

这是我使用的映射:

PUT src_dst_enriched
{
    "mappings": {
        "src_dst_enriched": {
            "properties": {
                "src": {
                    "properties": {
                        "location": {
                            "type": "geo_point"
                        }
                    }
                },
                "dst": {
                    "properties": {
                        "location": {
                            "type": "geo_point"
                        }
                    }
                },
                "timestamp": {"type": "date"}
            }
        }
    }
}

我现在可以在Kibana的地图上看到IP地址:

map