neo4j:文件导入,关系匹配,创建新关系

时间:2017-10-27 18:05:15

标签: neo4j cypher

我知道如何在SQL中完成这项任务,但很难将我的大脑包裹在cypher中如何做到这一点。

基本上处理主数据设置,其中用户具有master_id(节点)并且需要使用现有关系属性来确定master_id,以便在master_id节点和位置节点之间创建新关系。

目前将主用户创建为包含master_id属性的节点。在主用户和品牌之间创建关系,并且该关系具有brand_user_id的属性。

我现在有另一个我需要导入的文件,其中包含brand_user级别的数据,但需要在master_id和位置节点之间创建关系。为了做到这一点,因为文件不包含master_id属性,我试图使用新文件根据与品牌的现有关系查找master_id,然后使用该master_id创建与该位置的新关系。

有这种关系:

(m:Master{master_id:12345})-[:IS_BRAND_USER{brand_user_id:9876}]->(b:Brand{name:"Acme"})

拥有此文件:

brand_user_id,location_id
9876,6

需要这种关系:

(m:Master{master_id:12345})-[:HAS_LOCATION]->(l:Location{id:6})

我的方法:

LOAD CSV WITH HEADERS FROM "file:///brand_user_ids.csv" as buid
MATCH (m:Master)-[r:IS_BRAND_USER{brand_user_id:buid.id}]->(b:Brand)
WITH m, buid.location_id AS location_id
MATCH (l:Location {id: location_id})
CREATE (m)-[:HAS_LOCATION {source: 'abcdef'}]->(l)

似乎运行了很长时间,并且在一小时后没有看到任何真正的进展,所以我想知道这是否从根本上是正确的方法,或者如果我无意中创建了一些可怕的交叉连接等效。

1 个答案:

答案 0 :(得分:1)

问题是你试图在关系中输入图表。而且这总是需要大量的扫描图表"。

现在,我不是您网域的专家,但您可能在这里缺少一种节点...... BrandUser。可能有几个原因:

  1. 根据您的数据,Master可以拥有许多BrandUser ID。每个品牌可能超过一个?您是否有其他在BrandUser级别有意义的属性?
  2. 该位置数据很奇怪。你不同意它实际上是BrandUser有一个位置并且Master可能有很多位置吗?
  3. 然而,最重要的原因是......如果您要一直在 brand_user_id 上输入图表(并从可能是这种情况的位置示例来判断)。 ..你有理由把它变成一个节点。

    所以......它确实是一个建模问题。

    希望这有帮助。

    此致 汤姆