弹性搜索批量上传不继承预定义映射

Elastic Search bulk upload not inheriting predefined mapping

我正在尝试使用 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 仪表板时,文件大小字段的内容仍然是一个已分析的文本字段。这是一个问题,因为我想将它用作 Kibana 可视化中的分桶数字。

我试图在 JSON 文件上使用一些正则表达式来解决这个问题,以便它读取时不带整数引号:

{ 
   ...
   "filesize" : 123456
}

然后我再次执行整个删除 index/create mapping/re-upload 过程,结果相同:Elastic 仍然相信它是一个文本字段。

我是不是做错了什么?还是我错过了一条相关信息,这意味着这将不起作用?

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

备案:

弹性版本 - 2.2.0

Kibana 版本 - 4.4.1

好的,我明白了。

基本上删除索引时我只是运行一个"DELETE my_index"。尝试重新上传数据时,映射和所有其他相关内容保持不变。

我只是运行一个"DELETE _all",然后做了我的映射,然后重新上传数据,然后创建了新索引,现在一切正常。