1

製品の使用パターンをモデル化するプロジェクトに取り組んでいますが、単一のパターンに完全に一致させる最善の方法を特定するのに苦労しています

モデルには、さまざまな製品を表すいくつかのノードの中心またはハブとして機能するいくつかの「product_pattern」ノードがあります。各製品ノードは一意であり、任意の product_pattern に接続できます。一連の製品パターン ノードは次のようになります。

--pattern_1
--- Product A
--- Product B
--- Product C

--pattern_2
--- Product A
--- Product B
--- Product C
--- Product D

--pattern_3
--- Product B
--- Product C

製品 B と C、および B と C のみを使用する product_patterns のグラフを照会したいと思います。

Start b = node(16), c = node(37)
MATCH (b)<-[:PRODUCT_USED]-(n)-[:PRODUCT_USED]->(c)
RETURN n

すべての product_patterns が B および C との関係を持っているため、返されるすべての product_patterns を取得します。クエリ対象から追加の関係を持つ一致を削除するには、2 つの戦略を予見します..

  1. product_pattern.num_products の各パターン ノードにプロパティを作成し、最初の MATCH 後に WHERE 句に対して使用します。この場合、num_products プロパティは、B と C のみとの関係を持つノードの '2' と一致する必要があります。ここでの私の懸念は、プロパティの返された各ノードを掘り下げる必要があり、人気のある製品が返されるリストをはるかに大きくすることです。

  2. 関係のないグラフ内の他のすべての製品に対して WHERE NOT 句を作成します... 理想的ではなく、グラフ全体をトラバースする可能性が最も高いです。

クエリが、クエリに一致するが追加の関係を持つノードではなく、要求した関係の一致を正確に返すことを確認するエレガントな方法はありますか?

4

1 に答える 1

2

これを試すことができますか:

Start b = node(16), c = node(37)
MATCH (b)<-[:PRODUCT_USED]-(n)-[:PRODUCT_USED]->(c)
WHERE length((n)-[:PRODUCT_USED]->(c)) == 2
RETURN n
于 2013-11-03T15:26:51.167 に答える