Neo4j:返回并行查询结果

时间:2018-02-28 12:02:37

标签: neo4j cypher match graph-databases

前言我对Neo4j/Cypher相对较新。我在这里写的查询将返回所有满足以下要求的节点:
  i)命名节点的第一次订单交互(f1-3);

ii)存在于两个命名节点之间的路径中,最多步长为3个节点。当然,我还想返回命名节点。我目前使用的查询如下所示:

MATCH (que:Entity)-[:pp]-(con)-[:pp]-(con)-[:pp]-(que:Entity)
WHERE que.Symbol = "f1" OR que.Symbol = "f2" OR que.Symbol = "f3"
WITH que, con
MATCH (que:Protein)-[:pp]-(loc:Protein)
RETURN que, loc, con

使用的数据有1个节点类型和1个关系类型。在提议的查询中,我使用que来引用命名节点Symbol引用用于引用每个命名节点的节点属性(字符串),在数据集中,它是一个通用名称。我基本上希望返回每个指定个体的朋友以及链接每个指定个体的所有朋友(最大路径长度为两个连接的朋友)。基本图如下所示;关系的方向性并不重要。为了澄清我想要返回彩色节点。

Illustration of desired result

对于这个问题的简单性以及我尝试过的查询中的任何错误所引起的任何骚动,我深表歉意。

1 个答案:

答案 0 :(得分:0)

我不知道我是否完全理解您的问题,但我认为您可以使用variable-length path来实现目标。

MATCH (que:Entity)-[:pp*1..3]-(con)
WHERE que.Symbol in ['f1','f2','f3']
RETURN que, con

以上查询匹配所有路径,最小大小为1(直接朋友),最大大小为3。