小编dfd*_*226的帖子

如何将非常大的geojson文件导入neo4j?

问题背景


我目前正在构建一个应用程序,该应用程序可以在图形数据库中对各种地理特征(道路、城镇、高速公路等)进行建模。地理数据全部采用 GeoJSON 格式。

cypher 语言中没有LOAD JSON函数,因此加载 JSON 文件需要将完全解析的 JavaScript 对象作为参数传递,并使用UNWIND访问数组属性和对象以创建节点。(本指南对我的入门帮助很大:在 neo4j 中加载 JSON)。由于 GeoJSON 只是一个建立在 JSON 约定之上的规范,因此 load JSON 方法非常适合大小合理的文件。

但是,地理数据文件可能非常庞大。我尝试导入的一些文件的范围从 100 个特征到 200,000 个特征。

遇到的问题是,对于这些非常大的文件,查询在完全处理完文件之前不会合并数据库中的任何节点。对于大文件,这通常会超过neo4j 中设置的 3600 秒超时限制。所以我最终等了一个小时才发现我的数据库中没有新数据。

我知道对于一些数据,当前的建议是将其转换为 CSV,然后使用 LOAD CSV 的优化。但是,我认为将 GeoJSON 压缩为 CSV 并不容易。

主要问题


是否可以从非常大的 JSON/GeoJSON 文件中分批发送数据,以便 neo4j 间歇性地提交数据?

当前方法


为了导入我的数据,我构建了一个简单的 Express 应用程序,它通过 Bolt 协议(使用官方二进制 JS 驱动程序)连接到我的 neo4j 数据库。我的 GeoJSON 文件对每个功能都有一个众所周知的文本 (WKT) …

neo4j geojson cypher

6
推荐指数
1
解决办法
864
查看次数

如何在neo4j密码中按节点标签过滤结果?

我有一个图形数据库,用于绘制建筑物和公交车站之间的连接,其中图形包含其他连接件,例如道路和十字路口(在许多节点类型中)。

我试图弄清楚的是如何向下过滤路径以仅返回特定的节点类型。我目前正在努力解决两个相关的问题。

问题1:如何返回路径上的节点标签?

似乎逻辑上的第一步是确定哪种类型沿路径出现的节点。

我尝试了以下方法:

MATCH p=(a:Building)­-[:CONNECTED_TO*..5]­-(b:Bus) 
WITH nodes(p) AS nodes 
RETURN DISTINCT labels(nodes);
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个类型异常错误,labels()需要类型为node而不是Collection的数据。我想动态知道路径上的节点类型,以便最终过滤路径。

问题2:如何在路径中返回与第一步中标识的标签匹配的节点的子集?

说我发现,之间(a:Building)(d1:Bus)(d2:Bus)我可以期望找到(:Intersection)节点和(:Street)节点。

这是我的图形的简化模型:

(a:Building)­­--(:Street)­--­(:Street)--­­(b1:Bus) 
             \­­(:Street)--­­(:Intersection)­­--(:Street)--­­(b2:Bus)
Run Code Online (Sandbox Code Playgroud)

我写了一条MATCH语句,该语句将查找(:Building)(:Bus)节点之间的所有可能路径。接下来,我需要做什么来过滤以选择性地返回Street节点?

MATCH p=(a:Building)-[r:CONNECTED_TO*]-(b:Bus)
  // Insert logic to only return (:Street) nodes from p
Run Code Online (Sandbox Code Playgroud)

任何对此的指导将不胜感激!

neo4j cypher

5
推荐指数
1
解决办法
5269
查看次数

标签 统计

cypher ×2

neo4j ×2

geojson ×1