嵌套结构

时间:2016-07-19 20:02:03

标签: json elasticsearch

我正在寻找关于映射一个有点动态结构供Elasticsearch使用的一些指针。

原始结构本身就是json,但问题是结构的一部分包含一个变量,而不是结构的外部元素是静态的。

为了提供一个有点编辑的例子,我的json看起来像这样:

"stat": {
    "state": "valid",
    "duration": 5,
},
"12345-abc": {
    "content_length": 5,
    "version": 2
}
"54321-xyz": {
    "content_length": 2,
    "version", 1
}

第一块很容易; Elasticsearch在映射结构的“stat”部分方面做得很好,如果我要将大量数据转储到索引中,它将按预期工作。问题是接下来的两个块本质上是相同的,但原始json的格式是一个独特的元素已经悄悄进入结构,而Elasticsearch想要默认映射它,生成一个看起来像这样的地图:

"stat": {
    "properties": {
        "state": {
            "type": "string"
        },
        "duration": {
            "type": "double"
        }
    }
},
"12345-abc": {
    "properties": {
        "content_length": {
            "type": "double"
        },
        "version": {
            "type": "double"
        }
    }
},
"54321-xyz": {
    "properties": {
        "content_length": {
            "type": "double"
        },
        "version": {
            "type": "double"
        }
    }
}

我希望能够索引所有“content_length”数据,但它已经分离了,并且使用了一些变量名称,当我将数据放入Kibana时,我结束了很长的字段名称旁边没用了。

是否可以为结构提供通用标签?或者在json生成阶段更简单地解决这个问题,我们的开发人员对通用结构名称进行硬编码并添加标识符字段名称。

任何见解/帮助都非常感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果生成了像12345-abc这样的键并且可能是无限值,那么进行一些有用的查询或聚合会变得很困难(如果不是不可能的话)。您不清楚用于分析数据的确切用例,但您应该查看nested objectshttps://www.elastic.co/guide/en/elasticsearch/guide/current/nested-objects.html)并根据您的需要生成输入json查询。如果您将这些额外的对象放入一个包含当前关键字段的特殊字段的数组中,您似乎会有更好的聚合结果。

{
  "stat": ...,
  "things": [
    {
      "thingkey": "12345-abc",
      "content_length": 5,
      "version": 2
    }, 
    ...
  ]
}