让我们说:
该产品可以在每个类别中具有自定义定义的排序/排序。
因此,唯一组是产品与类别的组合以及类别组合的订单/类别,例如:
--------------------------
|product |category|order|
|------------------------|
|prod1 |cat1 |3 |
|prod2 |cat1 |1 |
|prod3 |cat1 |2 |
--------------------------
|prod1 |cat2 |1 |
|prod2 |cat2 |2 |
|prod3 |cat2 |3 |
--------------------------
|prod1 |cat3 |2 |
|prod2 |cat3 |3 |
|prod3 |cat3 |1 |
--------------------------
目前,我已将每个产品的所有可用类别编入索引,例如:
array (
'id' => 'prod1',
'type_s' => 'product',
'categories_ss' =>
array (
0 => 'cat1',
1 => 'cat2',
2 => 'cat3',
),
...
...
...
'price_i' => 50
)
我希望能够搜索按自定义订单排序的类别x 中的所有产品。我应该使用哪个solr字段来存储每个类别中产品的订单?
我的Solr版本:4.10.4
答案 0 :(得分:1)
由于您已经用Solr4标记了此问题,因此我强烈建议您进行升级-DocValues的性能得到了很多增强(它们是在4.2中添加的,但是我认为您至少是在此之后的更高版本中)。其中一些可能会使该策略更加可行。
创建一个类型为int(或long)并启用docValues的动态字段(这将有助于减少用于排序的稀疏字段的内存消耗)。
<dynamicField name="sort_cat_*" type="int" docValues="true" indexed="true" stored="true" />
然后,如果可能的话,向文档中添加一个以类别或类别ID命名的字段-避免在字段名称中使用特殊字符会使一切变得简单。使用简单的替换策略(即将“ foo&bar”更改为“ foo_bar”):
sort_cat_cat1: 2
然后可以使用此字段进行排序。您可能已经有一个字段可以过滤以获取此类别中的项目。