0

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

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

index_name = 'test_index'

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

client.create(index_name, body=body)

然后我测试该类型是否正常工作(我尝试索引一个 int 以查看它是否转换为在上面创建索引期间的映射中设置的 float):

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类型的映射似乎不起作用,我在这里做错了什么?

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

4

1 回答 1

2

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

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

于 2020-05-20T19:12:08.763 回答