Конвертировать многомерный массив в Logstash - PullRequest
0 голосов
/ 05 февраля 2019

Как я могу преобразовать многомерную строку json SQL в допустимый объект JSON, чтобы ее можно было сопоставить с типами полей шаблона индекса Elasticsearch.

Пример:

Давайте предположим, что это мойШаблон индекса Elasticsearch.

{
  "settings": {
    "number_of_shards": "5"
  },
  "mappings": {
    "_doc": {
      "properties": {
        "manager": {
          "properties": {
            "age": {
              "type": "integer"
            },
            "name": {
              "type": "text"
            }
          }
        },
        "employees": {
          "type": "nested",
          "properties": {
            "age": {
              "type": "integer"
            },
            "name": {
              "type": "text"
            },
            "addresses": {
              "type": "nested",
              "properties": {
                "street": {
                  "type": "text"
                },
                "city": {
                  "type": "text"
                }
              }
            }
          }
        }
      }
    }
  }
}

Проблемным случаем является преобразование JSON для массива "сотрудники" и его внутреннего массива "адресов".

Пример данных SQL для "сотрудников":

[{"age":30,"name":"User 1","addresses":"[{\"street\":"Home street 1",\"city\":"New York"},{\"street\":"Home street 2",\"city\":"Washington"}]"}]

Конфигурация фильтра Logstash: преобразование работает, если «сотрудники» не содержат вложенный массив.Но проблема возникает, когда у массива есть вложенный массив.

filter {
  ruby {
    code => "
      require 'json'

      employees_json_value = JSON.parse(event.get('employees').to_s)
      event.set('employees',employees_json_value )
    "
  }
}

Вопрос в том, как преобразовать массив вложенных «адресов» столбцов «сотрудников» в объект JSON, чтобы я мог сопоставить его с шаблоном индекса Elasticsearch.

...