Как проиндексировать вложенный JSON, содержащий редко заполненные данные geo_point? - PullRequest
0 голосов
/ 13 мая 2019

Я использую 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-адреса, атрибут location отсутствует в JSON.Например, адрес источника в приведенном выше примере является частным IP-адресом, который не имеет связанной записи в службе геолокации IP.

Я пытаюсь выяснить, как создать сопоставление в Elastic, чтобыполе отметки времени (Unix millis) и местоположение (я) сохраняются / индексируются как правильные типы, чтобы их можно было искать.Местоположение (я) должно храниться как geo_point тип.

Меня смущает несколько вещей:

  1. JSON является вложенным, поэтому определение сопоставления необходимо учитыватьдля этого.
  2. Место малонаселенное.Надеемся, что он будет обрабатывать JSON с отсутствующими атрибутами.

«Автоматический» индексатор, видимый из Kibana, похоже, не обрабатывает распознавание того, что {"location": {"lat": ..., "lon": ...}} является geo_point:

Кто-нибудь знает, как я могу создать отображение для этих данных?

1 Ответ

0 голосов
/ 13 мая 2019

Это отображение, которое я использовал:

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

Теперь я могу видеть IP-адреса на карте в Кибане:

map

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...