私は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であることを認識していません。これらのフィールドは関連付けられていません。
ツリーをクエリする高速な方法であるため、Left / Rightアプローチが好きですが、Solrで使用することは可能ですか?おそらく私は複雑すぎて、Solrは優れたツリーサポートを持っていますか?