Neo4j:返回并行查询结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j:返回并行查询结果相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

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

以上是关于Neo4j:返回并行查询结果的主要内容,如果未能解决你的问题,请参考以下文章

在 neo4j 密码查询中使用多个匹配子句不会返回任何结果

NEO4J Optional Match when null, 整个查询返回为空

Neo4j - 将 CQL 返回结果映射到 List<POJO>

Neo4j - 订购作为中间结果一部分的列表

Neo4j 第八篇:投射和过滤

使用spring数据从Neo4j查询数据一直返回null