如何根据类别对 Solr 索引多个用户定义的排序?

How to Solr index multiple user defined sorting depending on categories?

假设我们有:

产品可以在每个类别中自定义 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

然后您可以使用此字段进行排序。您可能已经有一个字段,您可以根据该字段进行筛选以获取该类别中的项目。