在Solr中搜索多值类别树(左/右)

时间:2013-02-04 16:48:01

标签: solr

我使用Solr来存储产品。每个产品可以有多个类别。

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
<field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="cat_left" type="int" indexed="true" stored="true" multiValued="true"/>
<field name="cat_right" type="int" indexed="true" stored="true"  multiValued="true"/>

我想找到属于某个类别和以下子类别的所有产品。为了避免递归搜索,我计算每个类别节点的LEFT/RIGHT值。在SQL数据库中,它运行良好。示例查询如下所示:

SELECT * FROM Products p JOIN Categories c WHERE c.left > 2 AND c.right < 8

我在Solr中不能这样做,因为多个左右值没有配对。如果我有2对分配给产品:

{left: 2, right: 3}
{left: 6, right: 8}

我将查询:

+cat_left:[4 TO *] +cat_right:[* TO 5]

产品将被明显返回,因为最小的左值是2,最右边是8.Solr不知道左边等于2右边的3.这些字段没有关联。

我喜欢左/右方法,因为它是查询树的快捷方式,但是它可以与Solr一起使用吗?也许我过于复杂,索尔有一个很好的树支持?

1 个答案:

答案 0 :(得分:0)