【问题标题】:Fetching specific paths from neo4j Graph database从 neo4j Graph 数据库中获取特定路径
【发布时间】:2014-11-07 05:37:17
【问题描述】:

我们使用的是 Neo4j 2.1.4 社区版。

我们在获取 neo4j 中的特定路径时遇到了一些问题。

下面是使用的 csv 文件。

在图形数据库中,我们正在创建 Product、Company、Country 和 Zipcode 节点以及每个级别的关系类型为“MyRel”。在上述数据中,我们希望区分每个路径,

那是

Mobile, Google,US,88888 -- as path1

Mobile,Goolge,US -- as path2

Mobile,Goolge -- as path3

这就是为什么我们在数据文件中再创建一个名为Path 的列并将Path 值作为关系属性维护。因此,每当有人想查看不同的路径时,他可以根据关系属性 1 或 2 或 3 进行查询。例如,每当我们查询关系属性时,我们应该得到 Mobile,Google ,US

但每当我这样做时,在图中它都会为 Country 和 Zipcode 创建虚拟节点。这是因为在第 2 行和第 3 行中 zip 和 country 值为空(null)。

使用的查询:

LOAD CSV WITH HEADERS FROM "file:C:\\WorkingFolder\\Neo4j\\EDGE_Graph_POC\\newdata\\trial1.csv " as file
MERGE (p:Product {Name:file.Product})
MERGE (comp:Company {Name:file.Company})
MERGE (c:Country {Name:file.Country})
MERGE (zip:Zipcode{Code:file.Zipcode})
CREATE (p)-[:MyRel{Path:file.Path}]->(comp)-[:MyRel{Path:file.Path}]->(c)-[:MyRel{Path:file.Path}]->(zip)

结果图:

那么如何避免创建虚拟节点?

有没有更好的选择来获得正确的路径?

谢谢,

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    首先,一个简单的解决方案是跟随 LOAD CSV 查询与其他人一起清理您的图表。运行查询

    MATCH (zip:Zipcode { Code : ''})<-[r]-()
    DELETE zip, r
    

    MATCH (c:Country { Name : ''})<-[r]-()
    DELETE c, r
    

    然后你会得到你想要的图表。

    【讨论】:

      【解决方案2】:

      您可以使用

      过滤掉它们
      WHERE file.Country <> '' and file.Zipcode <> ''
      

      并拆分您的 CREATE,例如

      CREATE (p)-[:MyRel{Path:file.Path}]->(comp)
      WHERE file.Country <> '' and file.Zipcode <> ''
      MERGE (c:Country {Name:file.Country})
      MERGE (zip:Zipcode{Code:file.Zipcode})
      CREATE (comp)-[:MyRel{Path:file.Path}]->(c)-[:MyRel{Path:file.Path}]->(zip)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-22
        相关资源
        最近更新 更多