没有得到弹性的整数类型

时间:2017-08-28 06:07:03

标签: python elasticsearch kibana

我已经尝试了几个小时了。但这并没有像预期的那样发挥作用。

我通过python脚本将数据推送到elasticsearch。下面是我想要的整数字段,但它们不是作为整数存储的。有时,它们是无类型,否则它们是字符串。所以,我做了这个

    body['fuel_fee'] = int(rows[a][23] or 0)
    body['late_fee'] = int(rows[a][24] or 0)
    body['other_fee'] = int(rows[a][26] or 0)

但是我发现它们仍然是弹性存储的字符串。我想要sum 对这些进行操作。

我甚至删除了索引并重写了整个数据,因此我可以确认此处没有先前映射的问题。

为什么我没有将这些字段作为整数?我怎么能这样做?

编辑 - 我从postgres数据库中获取数据。在postgres中,这些字段存储为字符串,而不是整数。可以有任何影响吗?我想不,因为我在python中输入类型。

1 个答案:

答案 0 :(得分:1)

字段的数据类型可通过以下任一方式确定

  • 创建映射时(在索引任何实际数据之前)并明确告诉elasticsearch有关字段类型的信息。在您的示例中,字段fuel_fee将映射到 long ,并且包含非整数值的任何记录都将引发错误
  • 基于索引的第一个文档,elasticsearch确定字段类型。它会尝试将后续的文档字段值转换为相同的类型。

回到你的问题,你怎么知道你的所有字段都存储为字符串而不是整数?您可以尝试GET <your-index>/_mapping并查看您的假设是否正确。

如果问题仍然存在,请尝试执行以下任一操作:

  • 在索引任何数据之前创建mappings
  • 仅索引1个文档(使用kibana或通过curl api)并再次检查映射输出。