Elastic Search 忽略映射并且长字段显示为字符串

jas*_*ack 5 elasticsearch

我正在向 elasticsearch 添加一个架构,并在该架构中尝试添加一些先前已作为字符串处理的长字段。我创建了一个新索引并重新处理了数据,但在新索引中这些字段仍然显示为字符串。

来自索引端点的映射的相关部分:

image_features: {
    properties: {
        brightness: {
            type: "string"
        },
        contrast: {
            type: "string"
        },
        height: {
            type: "long"
        },
        sharpness: {
            type: "string"
        },
        width: {
            type: "long"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但返回发回:

image_features: {
     width: "400",
     height: "400",
     sharpness: "good",
     contrast: "good",
     brightness: "good"
},
Run Code Online (Sandbox Code Playgroud)

我最初创建了一个新索引并使用reindex来迁移数据。我还尝试创建一个新索引并通过批量操作重新加载所有数据。但这些值仍然是剩余的字符串。

Val*_*Val 4

你所看到的是源返回,ES将始终按照你发送的方式存储源,因此,它将返回你发送给他的内容。

但是,您可以确定 和image_features.heightimage_features.width被处理得同样长并已建立索引,因为您的映射将这些字段声明为long

如果您希望源返回数值,您需要发送带有数值的源(见下文),ES 不会转换您的源值,这意味着您需要修改执行索引的客户端进程。

image_features: {
     width: 400,
     height: 400,
     sharpness: "good",
     contrast: "good",
     brightness: "good"
},
Run Code Online (Sandbox Code Playgroud)