Geohash Свернуть график (уровень 5) из (уровень 7) с Cypher? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать график гео-хеша с 5-кратным увеличением от существующего с уровнем 7. Я попробовал этот код:

 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

однако в Cypher это не похоже на правдуисключение:

Caused by: org.opencypher.v9_0.util.SyntaxException: Invalid input 'S': expected 'l/L' (line 4, column 4 (offset: 57))

В английских словах я хочу: если начальный узел и конечный узел имеют одну и ту же подстроку геохеша, то создайте один узел с отношением, которое указывает на него:

intra relationship

еще создайте два узла:

inter relationship

NB : Проект, над которым я работаю, это CYPHER FOR APACHE SPARK

1 Ответ

0 голосов
/ 30 сентября 2018

Я решил свою проблему с помощью следующих шагов:

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

Geohash Level 5

...