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 图中的密码查询的主要内容,如果未能解决你的问题,请参考以下文章