【发布时间】:2014-05-06 23:28:14
【问题描述】:
我必须建立一个价格比较系统。我的想法是使用 Elasticsearch 来构建。 现在我有这个问题。如何汇总每个产品的卖家价格。
让我说我有这个简单的映射:
products: {
product: {
properties: {
id: {
type: "long"
},
name: {
type: "string"
},
....
sellers: {
dynamic: "true",
properties: {
sellerId: {
type: "long"
},
price: {
type: "float"
}
}
}
}
}
}
我可以汇总或分面每个产品的价格(最低、最高和卖家数)吗?
或者有没有办法用父子关系来构建这个东西?
【问题讨论】:
-
您真的要将价格表示为
float(或double)吗?您可能不是因为舍入问题。 -
嗨@pickypg 你推荐什么类型的?
-
@richardwhatever 在BigDecimal support 到达之前,我会使用
long将货币价值乘以100 来删除小数位(例如,1.23 美元变成123)。除非您需要超过两位数的精度,否则这应该有效。如果您需要两个以上的小数点,那么由于浮点数的性质,它会失去精度(因此不准确)作为double(更糟糕的是作为float)。 -
@pickypg 我只是在 Elasticsearch 中存储和比较正常的小数点后 2 位价格。所有折扣和计算都是在添加到搜索索引之前完成的。在这种情况下,浮点数是否无法可靠地存储小数点后 2 位?我只是不想在不必要的地方过度优化/复杂化。谢谢!
标签: elasticsearch elasticsearch-aggregation