仅使用MATCH&CREATE关系从Cypher LOAD CSV中删除EAGER

cha*_*ows 5 csv neo4j cypher load-csv

neo4j版本2.3.1

索引存在于Stoptime.stop_sequenceStoptime.key. Stoptime.stop_sequence是数字.

图形:

(Stoptime)-[:PART_OF]->(Trip)

声明:

//USING PERIODIC COMMIT 1000
PROFILE
load csv with headers from "file:///path/to/csv" as csv with csv limit 0
match (s1:Stoptime{key:(csv.trip_id + csv.stop_id)})-[:PART_OF]->(trip:Trip), (s2:Stoptime)-[:PART_OF]->(trip)
where s2.stop_sequence = s1.stop_sequence + 1
create (s1)-[:PRECEDES]->(s2);
Run Code Online (Sandbox Code Playgroud)

生成的配置文件如下所示:

+-----------------------+------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| Operator              | Rows | DB Hits | Identifiers                                        | Other                                                                                                             |
+-----------------------+------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +EmptyResult          |    0 |       0 |                                                    |                                                                                                                   |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +UpdateGraph          |    0 |       0 | anon[188], anon[227], anon[311], csv, s1, s2, trip | CreateRelationship                                                                                                |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +Eager                |    0 |       0 | anon[188], anon[227], csv, s1, s2, trip            |                                                                                                                   |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +Filter               |    0 |       0 | anon[188], anon[227], csv, s1, s2, trip            | Ands(trip:Trip, s2:Stoptime, s2.stop_sequence == Add(s1.stop_sequence,{  AUTOINT0}), NOT(anon[188] == anon[227])) |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +SimplePatternMatcher |    0 |       0 | anon[188], anon[227], csv, s1, s2, trip            |                                                                                                                   |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +SchemaIndex          |    0 |       0 | csv, s1                                            | Add(csv.trip_id,csv.stop_id); :Stoptime(key)                                                                      |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +Slice                |    0 |       0 | csv                                                | Literal(0)                                                                                                        |
| |                     +------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| +LoadCSV              |    1 |       0 | csv                                                |                                                                                                                   |
+-----------------------+------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何将MATCH + WHERE与CREATE分开以删除EAGER?

PRECEDES在将预先建立的关系填充到图表中之前,我是否唯一可以将CSV预处理为具有其中定义关系的新CSV ?或者是否有某种方法可以与更好的MATCH建立连续关系.

Tez*_*zra 0

Cypher 3.x 不再有这个问题。(如果你在 Cypher 2.3 兼容模式下运行,它不会消失)

因此,如果有人遇到此问题,我建议升级到 Neo4j 的最新版本。