0

Neo4J データベースで次のサブグラフをクエリしたいと思います。

(a)-->(b)-->(c)-->(d)
       |
       | -->(e)

注: a、b、c、d、e は、各ノードの属性値 (一意でない値) です。類似した属性値 (a から e) を持つこれらのノードには何千ものノードがありますが、それらは互いにランダムに接続されています。

Cyper クエリを記述して特定のサブグラフ (サブグラフの同型問題に似ています) を具体的に見つけて、(a) を探して返すにはどうすればよいですか? 次のCyperクエリを試しましたが、他のサブグラフがポップアップします:

START n1=node:SomeIndex(AttrVal="a")
MATCH n1-[]->n2-[]->n3-[]->n4
WHERE n2.AttrVal="b" AND n3.AttrVal="c" and n4.AttrVal="d"
WITH  n1, n2
MATCH n2-[]->n5
WHERE n5.AttrVal="e"
RETURN n1

WITH 句と 2 番目の MATCH 句を間違って使用していますか?

ありがとう!

4

1 に答える 1

1

コンマを使用して、複数のパスを 1 つの match 句に組み合わせることができます。

START n1=node:SomeIndex(AttrVal="a")
MATCH n1-[]->n2-[]->n3-[]->n4, n2-[]->n5
WHERE n2.AttrVal="b" AND n3.AttrVal="c" and n4.AttrVal="d" and n5.attrVal='e'
RETURN n1

補足 1: 次のようにステートメントをリファクタリングすることもできます。

START n1=node:SomeIndex(AttrVal="a"), n2=node:SomeIndex(AttrVal="b")
n3=node:SomeIndex(AttrVal="c"), n4=node:SomeIndex(AttrVal="d"),
n5=node:SomeIndex(AttrVal="e")
MATCH n1-[]->n2-[]->n3-[]->n4, n2-[]->n5
RETURN n1

グラフの構造によっては、2 番目の方が速い場合があります。

補足 2: で行ったように任意の関係タイプを照合する場合はn1-[]->n2、より短く読みやすい表記を使用できます。n1-->n2

于 2013-07-04T20:12:46.103 に答える