gpt4 book ai didi

Neo4j:查询以查找关系最多的节点及其连接的节点

转载 作者:行者123 更新时间:2023-12-03 15:59:28 28 4
gpt4 key购买 nike

我正在使用Neo4j CE 3.1.1,作者和书籍之间存在写关系。我想找到作者数量最多的N本书(例如N = 10)。在找到一些示例之后,我提出了查询:

MATCH (a)-[r:WRITES]->(b)
RETURN r,
COUNT(r) ORDER BY COUNT(r) DESC LIMIT 10

当我在Neo4j浏览器中执行此查询时,我会得到10本书,但这些书看起来不像大多数作者写的书,因为它们仅显示了与作者的几种写关系。如果我将查询更改为
MATCH (a)-[r:WRITES]->(b)
RETURN b,
COUNT(r) ORDER BY COUNT(r) DESC LIMIT 10

然后,我得到了作者数量最多的10本书,但我看不到它们与作者的关系。为此,我必须编写其他查询,以明确说明在上一个查询中找到的书名:
MATCH ()-[r:WRITES]->(b)
WHERE b.title="Title of a book with many authors"
RETURN r

我究竟做错了什么?为什么第一个查询不能按预期运行?

最佳答案

聚合仅具有基于非聚合列的上下文,并且根据您的匹配,唯一关系将仅在您的结果中出现一次。

因此,您的第一个查询是询问一行中的每个关系,以及该特定关系的计数,即1。

您可以用几种不同的方式重写它。

一种是收集作者并按作者列表的大小排序:

MATCH (a)-[:WRITES]->(b)
RETURN b, COLLECT(a) as authors
ORDER BY SIZE(authors) DESC LIMIT 10

如果关系本身对您来说很有趣,那么您始终可以收集作者及其关系。

编辑

如果您在节点上碰巧有标签(您的节点上绝对应该有标签),则可以尝试通过与所有书籍匹配,获取每本书的传入:WRITES关系的大小,进行排序和限制来尝试不同的方法。 ,然后与作者进行比赛:
MATCH (b:Book)
WITH b, SIZE(()-[:WRITES]->(b)) as authorCnt
ORDER BY authorCnt DESC LIMIT 10
MATCH (a)-[:WRITES]->(b)
RETURN b, a

您可以收集作者和/或返回关系,具体取决于输出所需的内容。

关于Neo4j:查询以查找关系最多的节点及其连接的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42238183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com