0

如何将多维 SQL json 字符串转换为有效的 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 索引模板。

4

0 回答 0