我们可以说:
产品可以在每个类别中定制定制/排序。
因此,独特的组合,产品结合类别和类别组合顺序/排序,例如:
--------------------------
|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
由于您已使用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
然后,您可以使用此字段进行排序。您可能已经有一个字段可以过滤以获取此类别中的项目。