我使用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一起使用吗?也许我过于复杂,索尔有一个很好的树支持?