neo4jを使用して、ラベルのうちの1つを持つノード(Person
およびOrganization
)のデータを保存しています。すべてのノードにはプロパティがあります。name
フィルタリングのためのneo4j cypherクエリ
すべての関係には、LinkedTo
というラベルが付けられ、プロパティはscore
です。
MATCH (n:Person) WHERE n.name =~ "(?i)person1"
MATCH (m:Organization) WHERE m.name =~ "(?i)organization1"
WITH m,n
MATCH p = (m)-[*1..4]-(n)
RETURN p ORDER BY length(p) LIMIT 10
これは今
(10件まで)すべてのパスを返します。私のようなこれらのノード間の経路を検索するパスのクエリを使用している
Person
の1組とOrganization
ノード間の複数の関係があるかもしれません特定のパスを見つけたいと思っています。すべての関係にはscore=1
が含まれています。これを達成する方法がわからない、私はMATCH p = (m)-[f*1..4]-(n)
で始まったが、廃止の警告が出た。だから、いくつかのグーグルと試行錯誤の後、私はこの思い付いた:
MATCH (n:Person) WHERE n.name =~ "(?i)person1"
MATCH (m:Organization) WHERE m.name =~ "(?i)organization1"
WITH m,n
MATCH p = (m)-[*1..4]-(n)
WITH filter(x IN relationships(p) WHERE x.score=1) AS f
ORDER BY length(p)
UNWIND f AS ff
MATCH (a)-[ff]-(b)
RETURN a,b,ff LIMIT 10
しかし、これは正しく、きれいではないではなく、私のパスに必要とされていない関係とノードを与えています。
これは基本的なサイファークエリかもしれませんが、私は初心者にすぎず、この点で助けが必要です。 :)私はこのクエリを検索している理解して何から
ありがとうとあなたの正規表現を置き換えるためにサニタイズフィールド(EX
_name
)を作成するようアドバイスしていまさに私が探していたもの! :) –あなたはまた、答えを受け入れることができます:(グラフで楽しくてください! – logisima
私は、それはそれを登録していないと思います! –