Neo4j:返回并行查询结果

问题描述 投票:0回答:1

前言我对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

我为这个问题的简单性和我尝试过的查询中的任何错误引起的任何骚动道歉。

neo4j cypher match graph-databases
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.