Solr在动态列上排序

Dhe*_*rni 5 solr

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

我有3张桌子

产品

|-------id----------|-----name-------|
|       p1          |      Prod 1    |
|       p2          |      Prod 2    |
|       p3          |      Prod 3    |
|       p4          |      Prod 4    |
|       p5          |      Prod 5    | 
|-------------------|----------------|
Run Code Online (Sandbox Code Playgroud)

类别

|-------id----------|-----name-------|
|       c1          |      Cat 1     |
|       c2          |      Cat 2     |
|       c3          |      Cat 3     |
|       c4          |      Cat 4     |
|-------------------|----------------|
Run Code Online (Sandbox Code Playgroud)

产品分类

|-----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     |
|-------------------|----------------|-------------|
Run Code Online (Sandbox Code Playgroud)

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

目前我的solr doc看起来像

{
    product_id:p1,
    category_id:[c1, c2]
}
Run Code Online (Sandbox Code Playgroud)

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

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

{
    product_id:p1,
    category_id:[c1, c2],
    c1_weight: 120,
    c2_weight: 130
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢Dheerendra

Pet*_*ses 2

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

{
    product_id:p1,
    category_id:c1,
    weight:120
},
{
    product_id:p1,
    category_id:c2,
    weight:130
}
Run Code Online (Sandbox Code Playgroud)

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

如果您搜索某些产品属性并且需要跨类别去重复,则会出现唯一复杂的因素(请参阅字段折叠文档