Neo4j 查找最常见的属性-密码

Neo4j 查找最常见的属性-密码,neo4j,cypher,Neo4j,Cypher,是否有一种方法可以使用cypher来派生特定节点类型的最常见(和第二常见)属性值 目前,我正在确定财产的不同价值: MATCH(a:Label1)-[r:REL]->(b:Label2) RETURN DISTINCT b.prop; 然后逐一计算: MATCH(a:Label1)-[r:REL]->(b:Label2) WHERE b.prop = "x" RETURN COUNT(x); 任何帮助都将不胜感激,我正在使用Neo4j 3.0.0 我不知道如何组合这些查询。您

是否有一种方法可以使用cypher来派生特定节点类型的最常见(和第二常见)属性值

目前,我正在确定财产的不同价值:

MATCH(a:Label1)-[r:REL]->(b:Label2) RETURN DISTINCT b.prop; 
然后逐一计算:

MATCH(a:Label1)-[r:REL]->(b:Label2) WHERE b.prop = "x" RETURN COUNT(x); 
任何帮助都将不胜感激,我正在使用Neo4j 3.0.0

我不知道如何组合这些查询。

您可以使用
keys()
函数从每个匹配节点获取属性。这将返回该节点的键集合。展开集合并聚合所有匹配节点上每个属性的计数

MATCH (a:Label1)-[r:REL]->(b:Label2)
UNWIND keys(b) as prop
RETURN prop, count(*) as num_props
ORDER BY num_props desc
这很容易:

MATCH (a:Label1)-[r:REL]->(b:Label2)
RETURN b.prop, count(*) as occurences
ORDER BY occurences DESC
LIMIT 2

您可以在此处阅读有关自动聚合的内容:

oh-我看到的是属性值,而不是属性键-抱歉-我的partPerfect阅读不好,谢谢-我添加了order DESC以获得最常见的。请添加注释,以便用户理解答案,而不仅仅是代码转储,否则它可能会被标记为删除。@AlBlue没问题
//
// Get patterns
MATCH (a:Label1)-[r:REL]->(b:Label2)
//
// Pass through all keys
UNWIND KEYS(b) as key
   //
   // Get patterns again
   MATCH (a:Label1)-[r:REL]->(b:Label2)
//
// Aggregating by title of the properties and its content
RETURN key as propName, b[key] as propValue, count(b[key]) as propRank
//
// Sort the largest property-value pairs first
ORDER BY propRank DESC