Elastic Search批量上传未继承预定义映射

时间:2016-03-10 01:22:02

标签: json elasticsearch kibana

我正在尝试使用bulk upload方法将JSON内容上传到Elastic中,但是情况是创建所述JSON的导出应用程序并不能完全提供干净的JSON。一个例子:

{ 
   ...
   "filesize" : "123456"
}

当我批量上传时,Elastic将字段“filesize”解释为字符串,因此我决定尝试create a mapping以便Elastic尝试将其作为整数读取。我不完全确定这是正确的做事方式,因为我不相信字段映射强制执行从字符串到数字的转换,但是它仍然值得一试。

我的映射是:

PUT /my_index/
{
  "mappings": {
    "my_item": {
      "properties": {
        "sub_item_a": {
          "properties" :{
            "sub_item_b": {
              "properties": {
                "filesize": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    }
  }
}

创建此映射后,我通过以下方式检查了映射:

GET /my_index/my_item/_mapping

这确认了映射已经到位,因此我导入了数据,再次检查了映射并确认它仍然正确(并且正确地嵌套在动态分析的所有其他内容中)。

但是当我转到Kibana的Discover仪表板时,filesize字段的内容仍然是一个分析的文本字段。这是一个问题,因为我想在Kibana可视化中将其用作分段数字。

我尝试使用JSON文件上的一些正则表达式来解决这个问题,使其在没有围绕整数的引号的情况下进行读取:

{ 
   ...
   "filesize" : 123456
}

然后我再次完成了整个删除索引/创建映射/重新上传过程并发生了相同的结果:Elastic仍然确信它是一个文本字段。

我做错了什么吗?或者我错过了一条相关信息,这意味着这不起作用?

我知道我可以通过LogStash获得结果,但我正在尝试删除任何处理步骤以简化正在构建的应用程序的这一部分。

记录:

弹性版 - 2.2.0

Kibana版本 - 4.4.1

1 个答案:

答案 0 :(得分:0)

好吧,我明白了。

基本上在删除索引时我只是运行了“DELETE my_index”。当尝试重新上载数据时,映射和所有其他相关的东西保持不变。

我刚刚运行了一个“DELETE _all”,然后进行了我的映射,然后重新上传了数据,然后创建了新索引,现在一切正常。