【发布时间】:2016-04-19 06:15:49
【问题描述】:
neo4j 2.3.1 版
索引存在于Stoptime.stop_sequence 和Stoptime.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);
生成的配置文件如下所示:
+-----------------------+------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| 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 | |
+-----------------------+------+---------+----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+
在这种情况下如何将 MATCH + WHERE 与 CREATE 分开以删除 EAGER?
在将预先构建的关系填充到图表中之前,我唯一的方法是预处理 CSV,变成一个新的,其中定义了 PRECEDES 关系吗?或者有什么方法可以用更好的 MATCH 建立连续关系。
【问题讨论】:
-
对于任何有类似问题的人,这个blog post 很好地解决了这个问题。