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 的 source
和 target
变量。
所以,是的,您的 Cypher 语句必须始终返回 neo4j 原生 ID。
【讨论】:
以上是关于Neo4J Graph Algorithms Cypher Projection 应该只返回数字吗?的主要内容,如果未能解决你的问题,请参考以下文章
运行 Neo4j Graph 算法 Louvain 时出现 ArrayIndexOutOfBoundsException