Neo4j 图中的密码查询

Posted

技术标签:

【中文标题】Neo4j 图中的密码查询【英文标题】:Cypher query in a neo4j graph 【发布时间】:2021-06-14 16:37:19 【问题描述】:

我在 Neo4j 中有以下图表:图书:book_id、isbn、language_code、title、image_url、small_image_url、avg_ratings、作者:姓名, 读者: id, 具有 3 个关系:(Reader)-[:Rated]->(Book) 具有属性 rating:value,(Reader)-[:Recommend ]->(书)(作者)-[:Write]->(书)。 我想通过 Cypher 的查询找到最推荐的书。 我写了一个查询,但我不太确定,因为我不熟悉使用 count() 和 max() 运算符。

这是我的尝试:

MATCH (r:Reader) - [rel:recommend] -> (b:Book) 
RETURN count(rel), b 
ORDER BY count 
LIMIT 1

【问题讨论】:

请包括您的尝试。 MATCH (r:Reader) - [r:recommend] -> (b:Book) RETURN count(r), b ORDER BY count LIMIT 1 嗯,变量r很困惑:它是指读者还是推荐关系?你应该得到一个语法错误。您可能还需要按 DESC 排序。 【参考方案1】:

我会试试这个:

MATCH (:Reader) - [:recommend] -> (b:Book) 
RETURN 
    count(1) AS `Number of Recommendations`, 
    b AS `Book`
ORDER BY `Number of Recommendations` DESC
LIMIT 1

我会放弃LIMIT 子句,直到你确定它正在做你想做的事情。我没有你的数据库,所以我无法测试这个,但也许这可以作为第一次尝试。

【讨论】:

谢谢,但我还是不明白 count(1) 如何计算每本书的推荐数。 为什么要放 DESC? 您需要 DESC 以降序排列值,以便第一个是最大的。 count(1) 只是根据分组进行计数 - 在这种情况下是按书。执行count(1) 通常比执行count(r) 快一点。我已经在我可以访问的 Neo4j 数据库上测试了这个代码的一个版本,它可以工作。

以上是关于Neo4j 图中的密码查询的主要内容,如果未能解决你的问题,请参考以下文章

Neo4J 密码查询“继承”术语

neo4j 密码查询优化

Neo4j 密码查询以获取与特定其他节点没有关系的所有节点

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

在庞大的数据集上优化 Neo4j 密码查询

如何在 neo4j .net 客户端中使用密码查询返回两个集合