创建索引时无法设置字段类型

Can't set types of fields when creating indexes

我正在使用 Elasticsearch 7.6.2(运行 具有默认选项的官方 docker 图像)和 py-elasticsearch 7.6.0(安装版本 >=7.6 <8)

我正在尝试使用这样的 float 字段创建索引(如 in the lib docs 所述):

index_name = 'test_index'

body = {'mappings': {'properties': {'float_field': {'type': 'float'}}}}

client.create(index_name, body=body)

然后我测试该类型是否有效(我尝试索引一个 int 以查看它是否转换为在上面创建索引期间映射中设置的浮点数):

id_ = 123
value = 11

client.index(index_name, body={'float_field': value}, id=id_)

r = client.get(index_name, id=id_)['_source']['float_field']

结果值是整数,不是浮点数:

assert r == value  # passes
assert isinstance(r, float)  # AssertionError

所以 float_fieldfloat 类型的映射似乎不起作用,我在这里做错了什么?

无论我在映射中设置什么,类型似乎只能自动推断。

将类型设置为float只会将值索引为倒排索引中的浮点数,但ES永远不会更改您在源文档中添加的任何值,因此您从源文档中检索的值您编入索引(即来自 GET 调用)将始终是原始索引。

底线:ES 不会对源文档中的字段值进行任何类型转换。