从只有 MATCH 和 CREATE 关系的 Cypher LOAD CSV 中删除 EAGER

Posted

技术标签:

【中文标题】从只有 MATCH 和 CREATE 关系的 Cypher LOAD CSV 中删除 EAGER【英文标题】:Remove EAGER from Cypher LOAD CSV with only MATCH & CREATE relationship 【发布时间】:2016-04-19 06:15:49 【问题描述】:

neo4j 2.3.1 版

索引存在于Stoptime.stop_sequenceStoptime.keyStoptime.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:Stoptimekey:(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 很好地解决了这个问题。 【参考方案1】:

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

所以任何遇到这个问题的人,我建议升级到最新版本的 Neo4j。

【讨论】:

以上是关于从只有 MATCH 和 CREATE 关系的 Cypher LOAD CSV 中删除 EAGER的主要内容,如果未能解决你的问题,请参考以下文章

基于CY7C68013A-56LTXC的逻辑分析仪

Neo4j-cypher语言

Neo4j基本操作

通过创建元素从而实现三个下拉框的联动效果(create.Element("option"))和提交表单时的验证p.match("请选择")

正则学习

python语言里match()和search()的区别是啥啊