Neo4j - 仅当存在所有节点对之间的关​​系属性时返回路径

时间:2015-11-12 05:02:15

标签: neo4j cypher

  

假设我有路径A-> B-> C-> D且关系具有属性val。   现在,我必须从路径中选择任意两个节点,如果rel.val> 0.8   如果所有节点对都为真,则返回路径

例如:

 P = A-->B-->C-->D
 All nodes = [A,B,C,D]
 return p if{
             rel.val of (A,B) >0.8
             rel.val of (A,C) >0.8
             rel.val of (A,D) >0.8
             rel.val of (B,C) >0.8
             rel.val of (B,D) >0.8
             rel.val of (C,D) >0.8
         }

这是我的查询,(当然查询错误):

MATCH p=(a{word:"quality"})-[r*1..2]->(b) 
WHERE NONE (n IN nodes(p) WHERE size(filter(x IN nodes(p) WHERE n = x))> 1)
MATCH q = (a)-[r:coocr]->(b) where a in nodes(p) AND b in nodes(p) AND NOT  b = a AND None(rel IN rels(q) WHERE rel.val < 0.8 )
RETURN p

1 个答案:

答案 0 :(得分:2)

总之,您希望MATCH路径,然后确保路径中的所有节点对通过满足特定条件的关系进行连接({{1} })。

有趣的问题,我认为这不是那么简单。也许我忽略了一些明显的东西?

以下是如何解决问题的想法。您首先rel.val > 0.8路径,然后在路径中的所有节点之间MATCH,并计算与MATCH的关系数。此数字必须是节点数量的阶乘的大小(rel.val > 0.8,可能的组合数量为2)。

以下查询返回关系数,但我不知道如何将其与节点数的阶乘进行比较:

num relationships == (num nodes)!

我没有找到阶乘的内置函数,所以你必须研究这个。