【问题标题】:Can graph algorithms take nodes' and relationships' properties in Neo4J?图算法可以在 Neo4J 中获取节点和关系的属性吗?
【发布时间】:2018-09-27 20:10:55
【问题描述】:

我开始使用 Neo4J (3.3.x) 的 Graph Algorithms 插件,并想问插件是否可以接收节点/关系的属性,以便我可以添加这样的请求:

CALL algo.pageRank.stream('Page', 'LINKS', {iterations:20, dampingFactor:0.85})
YIELD node, score
RETURN node,score order by score desc limit 20

标记为Page 的节点的某些属性(例如,仅具有时间戳> 确定日期的节点)或仅具有特定属性x 的LINKS

或者,如果不可能,我应该使用 Cypher 投影并在 pageRank 算法中简单地进行 Cypher 查询吗?

【问题讨论】:

    标签: neo4j cypher graph-algorithm


    【解决方案1】:

    您可以使用Cypher projection 来更有选择性地选择使用图算法处理哪些节点和关系。

    例如,要仅在其timestamp > 1000LINKS 关系具有特定属性xPage 节点上执行algo.pageRank 算法,这应该有效:

    MERGE (dummy:Dummy)
    WITH dummy, ID(dummy) AS dummy_id
    CALL algo.pageRank.stream(
      'OPTIONAL MATCH (p:Page) WHERE p.timestamp > 1000 RETURN CASE WHEN p IS NOT NULL THEN ID(p) ELSE ' + dummy_id + ' END AS id',
      'OPTIONAL MATCH (p1:Page)-[link:LINKS]->(p2:Page) WHERE EXISTS(link.x) WITH CASE WHEN link IS NOT NULL THEN [ID(p1), ID(p2)] ELSE [' + dummy_id + ',' + dummy_id + '] END AS res RETURN res[0] AS source, res[1] as target',
      {graph:'cypher', iterations:20, dampingFactor:0.85})
    YIELD node, score
    WITH dummy, node, score
    WHERE node <> dummy
    RETURN node, score ORDER BY score DESC LIMIT 20;
    

    注意:当 Cypher 投影中使用的任一 Cypher 语句均未返回任何结果时,图形算法当前表现不佳(即它们抛出异常)。上面的查询通过确保两个语句都返回一个虚拟节点而不是什么都不返回来解决这个问题。 “包装”算法调用的 Cypher 语句将过滤掉由算法返回的虚拟节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      相关资源
      最近更新 更多