1

我使用 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 不知道对于 left 等于 2 right end on 3。这些字段没有关联。

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

4

1 回答 1

0

我的问题的答案是一维多边形字段如果值与几个间隔之一匹配,则 Solr 查询

于 2013-02-05T11:36:06.377 回答