小编yoa*_*ann的帖子

Neo4j 密码查询关系计数过滤

我有一个 neo4j 数据库架构,如下所示:

(a:Author)<-[r:HAS_AUTHOR]-(n:Article)-[rel:HAS_DESCRIPTOR]->(d:Descriptor)
Run Code Online (Sandbox Code Playgroud)

我想做一个查询,显示作者和描述符之间的链接,筛选出多次发表的作者 (count(r)>1) 和出现在多篇文章中的描述符 (count(rel)>1) )

这是我写的查询:

MATCH (a:Author)<-[r:HAS_AUTHOR]-(n:Article)-[rel:HAS_DESCRIPTOR]->(d:Descriptor)
WITH a,count(r) as cnt WHERE cnt>1
MATCH (a:Author)<-[r:HAS_AUTHOR]-(n:Article)-[rel:HAS_DESCRIPTOR]->(d:Descriptor)
WITH d,count(rel) as cnt1 WHERE cnt1>1
MATCH (a:Author)<-[r:HAS_AUTHOR]-(n:Article)-[rel:HAS_DESCRIPTOR]->(d:Descriptor)
RETURN * limit 100
Run Code Online (Sandbox Code Playgroud)

它似乎没有达到我的预期。我仍然看到链接到一篇文章的作者或描述符。

请注意,关系计数应仅在查询上下文中考虑(即:限制为 100,所有作者都应链接到查询输出图中的多篇文章)。

这是编写此查询的正确方法吗?谢谢

编辑

我很抱歉说得不够清楚。

如果我运行一个显示所有作者-文章-描述符图的简单查询,我可以得到下图中的一些场景。

在所有图像中,黄色节点是文章,绿色节点是作者,粉色节点是描述符。

场景 1:一篇文章中唯一提及该描述符。我想过滤掉那些只在一篇文章中提到的描述符。

在此输入图像描述

场景 2:一个描述符被多篇文章提及,但其作者未发表任何其他文章。我想过滤掉那些只发表过一篇文章的作者

在此输入图像描述

这两个过滤器应该应用于子图级别。例如:如果我过滤到特定的描述符类型,那么这个新子图中应该满足两个条件(作者和描述符有多于一篇文章)。

建议的第一个查询生成如下图所示的图表:

MATCH (a:Author)
WHERE size((a)<-[:HAS_AUTHOR]-()) > 1
MATCH (a)<-[:HAS_AUTHOR]-(n:Article)-[:HAS_DESCRIPTOR]->(d:Descriptor)
WITH a, d, collect(n) as articles
WHERE size(articles) > 1
RETURN a, d, articles
Run Code Online (Sandbox Code Playgroud)

collect(n) 作为 a,d 对的文章迫使作者在同一描述符上发布两次,这是不可取的。我希望允许一位发表过关于 2 个不同描述符的论文的作者出现。 在此输入图像描述

建议的第二个查询生成如下图所示的图表:

MATCH (d:Descriptor)
WHERE size((d)<-[:HAS_DESCRIPTOR]-()) > …
Run Code Online (Sandbox Code Playgroud)

filtering neo4j cypher

1
推荐指数
1
解决办法
3459
查看次数

标签 统计

cypher ×1

filtering ×1

neo4j ×1