Geohash 使用 Cypher 从(第 7 级)汇总图(第 5 级)?
Geohash Roll up Graph (level 5) from (level7) with Cypher?
我正在尝试从现有的 7 级缩放图创建一个 5 级缩放的 geohash 图。
我试过这段代码:
FROM GRAPH mergedGraph
MATCH (from)-[via]->(to)
CASE WHEN substring(from.geohash,0,5)=substring(to.geohash,0,5)
THEN
CONSTRUCT
CREATE (h:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(h)
ELSE
CONSTRUCT create (:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(:HashNode{geohash:substring(to.geohash,0,5)})
END
RETURN GRAPH
然而它在密码中似乎不正确,我得到一个例外:
Caused by: org.opencypher.v9_0.util.SyntaxException: Invalid input 'S': expected 'l/L' (line 4, column 4 (offset: 57))
我想要的英文单词:
如果起始节点和结束节点共享相同的 geohash 子字符串,则创建一个节点,该节点具有指向它的关系:
其他
创建两个节点:
NB: 我正在工作的项目是 CYPHER FOR APACHE SPARK
我通过以下步骤解决了我的问题:
1) 从现有图表创建一个级别为 5 的图表:
//Creation Geohash Graph with level 5 from the initial graph (level 7)
val Level5 = session.cypher("""
| FROM GRAPH mergeGraph
| MATCH (from)-[via]->(to)
| CONSTRUCT
| CREATE (:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(:HashNode{geohash:substring(to.geohash,0,5)})
| RETURN GRAPH
""".stripMargin).graph
2) 从上一张图中复制远距离节点:
session.cypher ("""
| CATALOG CREATE GRAPH nodes2 {
| FROM GRAPH session.Level5
| MATCH (n)
| WITH DISTINCT n.geohash AS geohash
|CONSTRUCT
| CREATE (h:HashNode{geohash:geohash})
|RETURN GRAPH
}""".stripMargin)
最后:
3) 通过复制第一个关系并将它们影响到远距离节点来创建远距离 5 级图
val level5= session.cypher("""
FROM GRAPH Level5
| MATCH (from)-[via]->(to)
| FROM GRAPH nodes2
| MATCH (n), (m)
| WHERE from.geohash=n.geohash AND to.geohash = m.geohash
construct
| CREATE (n)-[COPY OF via]->(m)
| RETURN GRAPH
""".stripMargin).graph
我正在尝试从现有的 7 级缩放图创建一个 5 级缩放的 geohash 图。 我试过这段代码:
FROM GRAPH mergedGraph
MATCH (from)-[via]->(to)
CASE WHEN substring(from.geohash,0,5)=substring(to.geohash,0,5)
THEN
CONSTRUCT
CREATE (h:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(h)
ELSE
CONSTRUCT create (:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(:HashNode{geohash:substring(to.geohash,0,5)})
END
RETURN GRAPH
然而它在密码中似乎不正确,我得到一个例外:
Caused by: org.opencypher.v9_0.util.SyntaxException: Invalid input 'S': expected 'l/L' (line 4, column 4 (offset: 57))
我想要的英文单词: 如果起始节点和结束节点共享相同的 geohash 子字符串,则创建一个节点,该节点具有指向它的关系:
其他 创建两个节点:
NB: 我正在工作的项目是 CYPHER FOR APACHE SPARK
我通过以下步骤解决了我的问题:
1) 从现有图表创建一个级别为 5 的图表:
//Creation Geohash Graph with level 5 from the initial graph (level 7)
val Level5 = session.cypher("""
| FROM GRAPH mergeGraph
| MATCH (from)-[via]->(to)
| CONSTRUCT
| CREATE (:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(:HashNode{geohash:substring(to.geohash,0,5)})
| RETURN GRAPH
""".stripMargin).graph
2) 从上一张图中复制远距离节点:
session.cypher ("""
| CATALOG CREATE GRAPH nodes2 {
| FROM GRAPH session.Level5
| MATCH (n)
| WITH DISTINCT n.geohash AS geohash
|CONSTRUCT
| CREATE (h:HashNode{geohash:geohash})
|RETURN GRAPH
}""".stripMargin)
最后:
3) 通过复制第一个关系并将它们影响到远距离节点来创建远距离 5 级图
val level5= session.cypher("""
FROM GRAPH Level5
| MATCH (from)-[via]->(to)
| FROM GRAPH nodes2
| MATCH (n), (m)
| WHERE from.geohash=n.geohash AND to.geohash = m.geohash
construct
| CREATE (n)-[COPY OF via]->(m)
| RETURN GRAPH
""".stripMargin).graph