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

问题描述 投票:0回答:1

我们可以说:

  • 3个产品,prod1,prod2和prod3
  • 3类,cat1,cat2和cat3

产品可以在每个类别中定制定制/排序。

因此,独特的组合,产品结合类别和类别组合顺序/排序,例如:

--------------------------
|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

solr solr4
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.