RavenDB中商店产品的相关性排序

RavenDB中商店产品的相关性排序,ravendb,Ravendb,假设我们有一个网上商店 产品表包含一个ReleaseDate和IsPublished值 订单表包含一个CreatedDate和OrderItems(包含ProductId和Count) 折扣表包含一个ProductId,最终是一个更复杂的产品查询以及折扣本身 我的目标是创建一个产品列表,其中包含产品属性和相关排序的方面。 RavenDB中的刻面非常棒,这里没有问题。 我的问题是分类 其思路如下: 产品按多个标准(发布日期、售出单位和正在销售)排序。产品每项标准得0到100分。最小值得0分,最大值

假设我们有一个网上商店

  • 产品表包含一个
    ReleaseDate
    IsPublished
  • 订单表包含一个
    CreatedDate
    OrderItems
    (包含
    ProductId
    Count
  • 折扣表包含一个
    ProductId
    ,最终是一个更复杂的产品查询以及折扣本身
  • 我的目标是创建一个产品列表,其中包含产品属性和相关排序的方面。 RavenDB中的刻面非常棒,这里没有问题。 我的问题是分类

    其思路如下: 产品按多个标准(发布日期、售出单位和正在销售)排序。产品每项标准得0到100分。最小值得0分,最大值得100分。每个标准都有一个权重。最终发布日期为50%重量,售出20%,发售30%

    这将导致以下公式(伪代码):

    我已经有了一个包含产品发布日期和soldUnits的索引。折扣仍然是一个问题,但不是这个问题的一部分。我也可以通过facet(minOn/maxOn)访问标准的最小/最大值


    我的问题

    解决这个问题的最佳选择是什么?我考虑过创建一个JavaScript索引,其中包含一个用于相关性计算的函数(“脚本”)。但是如何在索引中获得最小/最大值?我可能需要一个索引来表示价值(发布日期、售出单位),另一个索引用于表示相关性,对吗?我想这会使查询数据变得更加困难。 我还找到了Lucene的定制收集器,这可能就是我需要的功能?然而,我在RavenDB(目前使用的是v5.1)中找不到任何相关内容

    我试图解决这个问题的方式太复杂了吗

    product.relevance = 
    (50 * (product.releaseDate - minReleaseDate) / (maxReleaseDate - minReleaseDate)) +
    (20 * (product.soldUnits - minSoldUnits) / (maxSoldUnits - minSoldUnits)) +
    (30 * (product.isOnSale ? 1 : 0))