定价问题
问题:
我们有一个商品集合,该商品集合在不同商店中具有最低和最高价格以及最大折扣。
{
"item_id":1,
"price":{
"min":1500.00,
"max":3000.00
},
"max_discount":50
}
现在,我们有不同价格的不同商店,请考虑商店S1有0%的折扣,S2有50%的折扣,S3有20%的折扣。这里一件商品可以有n个商店。
现在我们有一种情况,我们希望根据所选商店显示库存,这些商店可以是S1x S2或S1或S1xS3等的组合。
在上述情况下
根据上述给定的解决方案,此处的每种定价都会发生变化。
当前,我们基于查看所有商店的信息,在产品列表中显示最低和最高价格。我们不显示基于商店组合的上市定价。
有没有有效的方法来大规模解决此问题?
答案 0 :(得分:0)
如果我理解正确-是否需要简单地从所有商店中获取汇总数据,就像从一个商店中获取数据一样?
如果是这种情况,则取决于实现该解决方案的解决方案,要么需要一个复杂的查询(将对其进行计算),要么一个中间处理程序(将以所需的形式准备结果)。
但是,如果这是一种体系结构的解决方案,则最好使用构造“多维数据集”的原理,在获取有关价格的新数据时,更改统计的目标结果,并从那里收集广义数据,将很快并且可以一直计数。
P.S。如果我对问题的理解不正确,请扩展源数据
答案 1 :(得分:0)
基于我在草稿中看到的id字段:重复数据删除和规范化是使您在Solr中不会很了解的概念。它们往往使事情变得更加复杂和缓慢。但是无论如何,回到您的问题。
我将对模式进行不同的建模。基本思想是为每个商店的特定商品建模报价。这样您就可以对此进行汇总。
<fields>
<field name="offer_id" type="int" indexed="true" stored="true" />
<field name="store_id" type="int" indexed="true" stored="true" />
<field name="item_id" type="int" indexed="true" stored="true" />
<field name="price" type="float" indexed="true" stored="true" />
<field name="msrp" type="float" indexed="true" stored="true" />
</fields>
要执行计算,您可以使用the Stats Component。您也可以添加Currencies。
一个例子看起来像这样(要约1是S1,要约2是S2)
q = offer_id:(1或2)&stats = true&stats.field = price
包含在您的回复中
<lst name="stats">
<lst name="stats_fields">
<lst name="price">
<double name="min">1500.0</double>
<double name="max">3000.0</double>
<!-- etc. -->
<lst name="facets"/>
</lst>
</lst>
</lst>
要显示最大折扣,我会计算
(统计信息组件的最小值)/(msrp)
例如1500/3000 = 0.5 => 50%
答案 2 :(得分:0)
这可能是“ NP”问题,因此可能没有有效的(计算)解决方案。假设您有N个商店和M个产品,可以进行快速组合数学运算(希望我没错)。组合的数量为:M *(2 ^ N)。
很显然,您无法对其进行预先计算。
我会采用启发式方法(取决于您的用例),或者根据需要应用特定的计算(取决于您的用例)。如果在您的用例中有意义,您可能可以临时缓存一些计算。