定价问题大规模解决

时间:2019-07-18 07:44:58

标签: solr architecture solrcloud

定价问题

问题:

我们有一个商品集合,该商品集合在不同商店中具有最低和最高价格以及最大折扣。

{
    "item_id":1,
    "price":{
    "min":1500.00,
    "max":3000.00
    },
    "max_discount":50
}

现在,我们有不同价格的不同商店,请考虑商店S1有0%的折扣,S2有50%的折扣,S3有20%的折扣。这里一件商品可以有n个商店。

现在我们有一种情况,我们希望根据所选商店显示库存,这些商店可以是S1x S2或S1或S1xS3等的组合。

在上述情况下

  • S1xS2:以这种方式改变价格
    • 最低价格:1500
    • 最高价格:3000
    • 最大折扣:50%
  • S1:以这种方式改变价格
    • 最低价格:3000
    • 最高价格:3000
    • maxdiscount:0%
  • S1xS3:价格以这种方式变化
    • 最低价格:2400
    • 最高价格:3000
    • 最大折扣:50%

根据上述给定的解决方案,此处的每种定价都会发生变化。

当前,我们基于查看所有商店的信息,在产品列表中显示最低和最高价格。我们不显示基于商店组合的上市定价。

有没有有效的方法来大规模解决此问题?

3 个答案:

答案 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>
  • offer_id 优惠的ID,每个商店的一项是优惠
  • 如果用户要筛选某些商店,或者要基于商店更新索引,则可能需要
  • store_id 。如果这不是用例,您也可以将其排除在外
  • item_id 的ID。我保留了这一点,因为您似乎对存储在其他地方的实际项目有更多详细信息,以便您可以使用API​​丰富搜索结果
  • 价格,这是我的主要建议,每项报价只有一个价格。请记住,要约是某商店中一项要约的要约。
  • 显示实际报价时,可以使用
  • msrp 制造商的建议零售价来计算折扣。您也可以将其命名为 standard_price 或类似名称。

要执行计算,您可以使用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)。

很显然,您无法对其进行预先计算。

我会采用启发式方法(取决于您的用例),或者根据需要应用特定的计算(取决于您的用例)。如果在您的用例中有意义,您可能可以临时缓存一些计算。