创建索引时无法设置字段类型
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_field
到 float
类型的映射似乎不起作用,我在这里做错了什么?
无论我在映射中设置什么,类型似乎只能自动推断。
将类型设置为float
只会将值索引为倒排索引中的浮点数,但ES永远不会更改您在源文档中添加的任何值,因此您从源文档中检索的值您编入索引(即来自 GET 调用)将始终是原始索引。
底线:ES 不会对源文档中的字段值进行任何类型转换。
我正在使用 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_field
到 float
类型的映射似乎不起作用,我在这里做错了什么?
无论我在映射中设置什么,类型似乎只能自动推断。
将类型设置为float
只会将值索引为倒排索引中的浮点数,但ES永远不会更改您在源文档中添加的任何值,因此您从源文档中检索的值您编入索引(即来自 GET 调用)将始终是原始索引。
底线:ES 不会对源文档中的字段值进行任何类型转换。