neo4j - 相対パス - sitecore query sort



サイファークエリで最長のパスを見つける方法 (1)

私はSTATUS = "on"プロパティとの関係を持つノードの中で最長のパスをすべて見つけ出すCypherクエリーを作成したいと思っています。

start n=node(*) 
match p = n-[r:INCLUDE*..]->m 

with n,MAX(length(p)) as l 
match p = n-[r:INCLUDE*..]->m 
WHERE all(rel in r 
 where rel.status='on' AND (length(p) = l) )
return p,l 

最長のパスだけでなく、最長のパスのみを見つけ出す必要があります。私の最初の条件に合うパスが8つある場合( where rel.status='on' )、1,2,3,3,4,6,6,6の長さでは、長さが6の3つのパスのみが返されます。

私は何をしますか?

私を案内してください、私はneo4jを初めて使っていて、たくさん試しましたが、めまい以外の何かを得ていないので、あなたの助けに感謝します。


リレーションシッププロパティの基準を最初のパスの一致まで上げてみると、その条件でフィルタリングされていないパスの最大長が計算されます。 次に、すべてのパスを再度一致させる必要がないように、パスと最大長をクエリの2番目の脚に入れます。 WITH句でパスを収集するためのパスを収集し、次に戻るときにパスの長さにフィルタをかけることができます。 のようなものを試す

START n=node(*)
MATCH p=n-[rels:INCLUDE*]->m 
WHERE ALL (rel IN rels 
  WHERE rel.status='on') 
WITH COLLECT(p) AS paths, MAX(length(p)) AS maxLength 
RETURN FILTER(path IN paths 
  WHERE length(path)= maxLength) AS longestPaths