我正在向elasticsearch添加一个模式,在模式中我试图添加一些字段作为以前作为字符串处理的long。我创建了一个新索引并重新处理了数据,但在新索引中,这些字段仍然显示为字符串。
索引端点映射的相关部分:
image_features: {
properties: {
brightness: {
type: "string"
},
contrast: {
type: "string"
},
height: {
type: "long"
},
sharpness: {
type: "string"
},
width: {
type: "long"
}
}
}
但回程发回:
image_features: {
width: "400",
height: "400",
sharpness: "good",
contrast: "good",
brightness: "good"
},
我最初创建了一个新索引并使用reindex来迁移数据。我还尝试创建一个新索引并通过批量操作重新加载所有数据。但这些价值观仍然存在。
答案 0 :(得分:0)
您所看到的是消息来源,ES将始终完全按照您发送的方式存储来源,因此,它将完全返回您发送给他的内容。
但是,您可以确保image_features.width
和long
已经处理得很长并且已经编入索引,因为您的映射会将这些字段声明为image_features: {
width: 400,
height: 400,
sharpness: "good",
contrast: "good",
brightness: "good"
},
。
如果您希望源返回数值,您需要使用数值发送源(见下文),ES不会转换您的源值,这意味着您需要修改您的客户端进程索引。
SELECT CASE WHEN hireorder <= cnt/10 THEN '*' ELSE '' END AS star,
ename,
hiredate
FROM (
SELECT ename, hiredate,
ROWNUMBER() OVER (PARTITION BY ename ORDER BY hiredate DESC) as hireorder,
COUNT(*) OVER () as cnt
FROM EMP
) sub