Neo4J Graph Algorithms Cypher Projection 应该只返回数字吗?

Posted

技术标签:

【中文标题】Neo4J Graph Algorithms Cypher Projection 应该只返回数字吗?【英文标题】:Neo4J Graph Algorithms Cypher Projection should return only numbers? 【发布时间】:2018-04-17 19:57:14 【问题描述】:

您好,我在 Cypher 中发出以下类型的 Graph Algorithm Neo4J 请求,它首先找到节点,然后找到它们之间的关系:

CALL algo.pageRank.stream('MATCH (u:Useruid:"0ee14110-426a-11e8-9d67-e79789c69fd7"), 
(ctx:Contextname:"news180417"), (u)<-[:BY]-(c:Concept)-[:AT]->(ctx) 
RETURN DISTINCT id(c) as id', 
'CALL apoc.index.relationships("TO","user:0ee14110-426a-11e8-9d67-e79789c69fd7") 
YIELD rel, start, end WITH DISTINCT rel, start, end MATCH (ctx:Context) 
WHERE rel.context = ctx.uid AND (ctx.name="news180417" ) 
RETURN DISTINCT id(start) AS source, id(end) AS target', 
graph:'cypher', iterations:5);

效果很好。但是,当我尝试返回 c.uid 而不是 Neo4J id() 时,图形算法不接受它。

这是否意味着我只能在图形算法中使用 Neo4J id 进行操作?

【问题讨论】:

Graph Algorithms 给出的错误是什么表明它不接受c.uid @RebeccaNelson id 应该是整数 听起来库不允许您调用返回非整数的MATCH 模式。 没错。所以这就是问题所在。 啊,对不起,我好像误解了你的意思。如果问题是“鉴于这个库说我不能返回一个字符串,我可以返回一个字符串吗?”答案当然是"不,这是不可能的"。您是否正在寻找可以接受标签作为 PageRank 的字符串值的替代调用或库? 【参考方案1】:

当您将 Cypher projection 与 Graph Algorithms 过程一起使用时,您会传递 2 个 Cypher 语句(和一个配置映射)。

第一个 Cypher 语句必须返回一个 id 变量,其值为节点的本机 ID。

第二个 Cypher 语句必须返回值也是节点 ID 的 sourcetarget 变量。

所以,是的,您的 Cypher 语句必须始终返回 neo4j 原生 ID。

【讨论】:

以上是关于Neo4J Graph Algorithms Cypher Projection 应该只返回数字吗?的主要内容,如果未能解决你的问题,请参考以下文章

neo4j服务器版本安装相应的算法库并使用

neo4j服务器版本安装相应的算法库并使用

运行 Neo4j Graph 算法 Louvain 时出现 ArrayIndexOutOfBoundsException

Neo4j的找到类似的连接节点

Graph Theory: Representation and Algorithms

Neo4j图分析—链接预测算法(Link Prediction Algorithms)