【发布时间】:2015-08-26 08:09:22
【问题描述】:
我创建了一个弹性搜索索引,我当前的映射将项目的美元金额存储为一个字符串。事实证明这很困难,因为我无法正确搜索/过滤此值。
GET catalog/product/_search
{
"filter": {
"range": {
"price": {
"from": 230.0,
"to": 300.0
}
}
}
}
其中价格被映射为字符串。我使用了一个字符串,因为从一个 python 十进制值开始,我遇到了这个值突然获得像 17.989999999999999999998789 这样的值的问题。这只有时会发生,但我不想涉及从 python 十进制到 java double/float 的问题(所以我只是 str() 的东西)。
对更好的方法有任何想法吗?我应该咬紧牙关将价格映射到双倍还是浮动?
【问题讨论】:
-
问题是 ElasticSearch 没有
decimal类型,因此它可能正在转换为float。乘以 100 并存储为美分,然后转换应用程序端?再见精度问题。 -
这是个好主意。如果您回答,我可以将其标记为这样。唯一的问题是返回大量数据,循环遍历所有这些项目可能是昂贵(缓慢)的应用程序端。我可以使用 ES 脚本,但我认为这也很慢。
-
你可能还想看看这个问题的第一个答案stackoverflow.com/questions/1458633/…
标签: python elasticsearch