【问题标题】:Cypher : return collections with unique nodesCypher:返回具有唯一节点的集合
【发布时间】:2016-10-21 13:03:47
【问题描述】:

这是一个返回不同单词及其文凭集合的查询

MATCH (diploma:Diploma)-->(w:Word) 
RETURN DISTINCT w, COLLECT(diploma) as diplomas, COUNT(diploma) as nb_diplomas
ORDER BY nb_diplomas DESC

(已编辑:删除 OPTIONAL MATCH 并在 COUNT 中使用文凭而不是用户,删除简历)

文凭可以包含多个单词,并且会出现在多个集合中。 我希望这个查询在第一个集合中只返回每个文凭一次,这意味着包含最多文凭节点的集合

【问题讨论】:

  • OPTIONAL MATCH 与您的其余查询完全分开。 result_node 应该是你已经匹配的东西吗?
  • result_node 实际上是文凭(我已经匹配),对不起
  • nb_users 完全独立于 Word 这里;您的查询基本上将返回废话,因为每个:Diploma 适用于相同数量的用户,而不管:Word。你的意思是不是(w:Word) <-- (ltr:Resume)
  • 好的,我明白了,我编辑了问题以简化查询,删除可选匹配并在计数中使用文凭而不是用户
  • 这并不能解决问题; # of resumes 也与单词无关,并且对于文凭来说是恒定的。

标签: neo4j cypher


【解决方案1】:

感谢@InverseFalcon 的建议,感谢 UNWIND 功能,我终于找到了方法

MATCH (diploma:Diploma)-->(w:Word) 
WITH DISTINCT w, COLLECT(diploma) AS diplomas 
WITH w, diplomas, LENGTH(diplomas) as nb 
ORDER BY nb DESC 
UNWIND diplomas as diploma 
WITH DISTINCT diploma, HEAD(COLLECT(w)) as w, MAX(nb) as nb
WITH DISTINCT w, COLLECT(diploma) as diplomas 
WITH w, diplomas, LENGTH(diplomas) as nb  
ORDER BY nb DESC 
RETURN w, diplomas, nb

【讨论】:

    【解决方案2】:

    因此,即使 :Diploma 与许多 :Words 相关联,您也只对 :Diploma 中最常用的 :Word 感兴趣,然后根据之前的内容为每个 :Word 和相关 :Diplomas 输出行过滤频率?

    这可能是一个好的开始:

    MATCH (diploma:Diploma)-->(w:Word) 
    WITH diploma, w, COUNT(w) as frequency
    WITH diploma, w 
    WHERE frequency = MAX(frequency)
    RETURN w, COLLECT(diploma) as diplomas, COUNT(diploma) as nb_diplomas
    ORDER BY nb_diplomas DESC
    

    请记住,如果文凭中有多个具有相同最大计数的单词,则该文凭将与这两个单词相关联,并出现在最后的两个集合中。

    如果需要,为了解决这个问题,您需要在查询中间选择一组最大单词的集合,例如:

    MATCH (diploma:Diploma)-->(w:Word) 
    WITH diploma, w, COUNT(w) as frequency
    WITH diploma, w 
    WHERE frequency = MAX(frequency)
    WITH diploma, COLLECT(w) as words
    WITH diploma, HEAD(words) as w
    RETURN w, COLLECT(diploma) as diplomas, COUNT(diploma) as nb_diplomas
    ORDER BY nb_diplomas DESC
    

    【讨论】:

    • 听起来很接近。我在WHERE frequency = MAX(frequency) 上遇到了无效的语法错误,我尝试了WITH diploma, w, MAX(frequency) as frequency 它可以工作,但没有带来预期的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多