Solr在动态列上排序

时间:2016-02-29 11:28:05

标签: solr

我想解决与基于类别中的产品的排序相关的问题:

我有3张桌子

产品

|-------id----------|-----name-------|
|       p1          |      Prod 1    |
|       p2          |      Prod 2    |
|       p3          |      Prod 3    |
|       p4          |      Prod 4    |
|       p5          |      Prod 5    | 
|-------------------|----------------|

分类

|-------id----------|-----name-------|
|       c1          |      Cat 1     |
|       c2          |      Cat 2     |
|       c3          |      Cat 3     |
|       c4          |      Cat 4     |
|-------------------|----------------|

PRODUCT_CATEGORY

|-----prod id-------|-----cat id-----|----score----|
|       p1          |      c1        |     120     |
|       p1          |      c2        |     130     |
|       p2          |      c1        |     150     |
|       p2          |      c3        |     120     |
|       p2          |      c2        |     140     |
|       p3          |      c2        |     180     |
|       p3          |      c3        |     160     |
|-------------------|----------------|-------------|

这意味着我有多个类别的产品。 我通过solr查询为每个类别动态生成一个列表页面。

目前我的solr doc看起来像

{
    product_id:p1,
    category_id:[c1, c2]
}

我现在面临的挑战是我需要支持基于产品类别权重的排序,即c1的列表页面将按顺序包含产品p2,p1,c3的列表将是p3,p2,p1(分数的降序) )

如果我将模式更改为doc看起来像

{
    product_id:p1,
    category_id:[c1, c2],
    c1_weight: 120,
    c2_weight: 130
}

这样我每次添加新类别时都需要向模式添加字段cx_weight,以便我可以按cx_weight字段进行排序。

让我知道一个解决方案,我可以使用solr排序机制按类别权重排序,每次添加类别时都不需要更改架构。

由于 Dheerendra

1 个答案:

答案 0 :(得分:2)

为什么不尝试将solr doc建模为Product_Category行?

{
    product_id:p1,
    category_id:c1,
    weight:120
},
{
    product_id:p1,
    category_id:c2,
    weight:130
}

这将支持您的类别页面要求。

如果您搜索某些产品属性并且需要跨类别重复删除,则会出现唯一的复杂因素(请参阅field-collapsing doc