Cypher查询按关系计数检索节点顺序

时间:2018-06-06 08:14:47

标签: neo4j cypher

在使用neo4j时,我在一个用例中遇到了一个问题,我需要使用cypher顺序从输入节点集的关系数来获取数据。

我对neo4j很新,如果问题太天真,我会后悔。

演示图:

enter image description here

我想要做的是,输入字符串说" java开发人员工程师"返回连接到节点java,开发人员和工程师的所有节点,但为连接到所有三个节点的节点提供最高优先级,然后将低优先级连接到连接到2的节点,将最低节点连接到仅连接到其中一个节点的节点。

我写了一个基本查询:

match(n:Token{name:"java"})-[res]->(y)
match(n1:Token{name:"developer"})-[res1]->(y1)
match(x:Token{name:"engineer"})-[res2]->(y2)
return n,n1,x,res,res1,res2,y,y1,y2

我面临的问题是优先考虑与所有3个输入节点连接的节点,如果存在任何不正确的输入令牌(例如java,开发人员,工程师和特斯拉,其中特斯拉不是令牌),则处理案例。

由于

1 个答案:

答案 0 :(得分:0)

以下查询假设传递了包含输入字符串的input parameter,并为每个不同的term返回:

  • 术语本身
  • 来自相关Token节点的该术语的路径集合,
  • 为该术语找到的路径数

结果也按照找到的路径数降序返回。

UNWIND SPLIT($input, ' ') AS name
MATCH p=(n:Token {name: name})-[:RELATED_TO]->(term)
WITH term, COLLECT(p) AS paths
ORDER BY SIZE(paths) DESC
RETURN term, paths, SIZE(paths) AS count