如何根据类别对 Solr 索引多个用户定义的排序?
How to Solr index multiple user defined sorting depending on categories?
假设我们有:
- 3 个产品,prod1,prod2 和 prod3
- 3 个类别,cat1、cat2 和 cat3
产品可以在每个类别中自定义 ordering/sorting。
所以独特的组是,产品与类别和类别组合 order/sort 例如:
--------------------------
|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
然后您可以使用此字段进行排序。您可能已经有一个字段,您可以根据该字段进行筛选以获取该类别中的项目。
假设我们有:
- 3 个产品,prod1,prod2 和 prod3
- 3 个类别,cat1、cat2 和 cat3
产品可以在每个类别中自定义 ordering/sorting。
所以独特的组是,产品与类别和类别组合 order/sort 例如:
--------------------------
|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
然后您可以使用此字段进行排序。您可能已经有一个字段,您可以根据该字段进行筛选以获取该类别中的项目。