ps如何做网站轮播图,房产网站方案,app开发要多少钱,前端工程师做交互网站Neo4j 图数据库 高级操作 文章目录 Neo4j 图数据库 高级操作1 批量添加节点、关系1.1 直接使用 UNWIND 批量创建关系1.2 使用 CSV 文件批量创建关系1.3 选择方法 2 索引2.1 创建单一属性索引2.2 创建组合属性索引2.3 创建全文索引2.4 列出所有索引2.5 删除索引2.6 注意事项 3 清…Neo4j 图数据库 高级操作 文章目录 Neo4j 图数据库 高级操作1 批量添加节点、关系1.1 直接使用 UNWIND 批量创建关系1.2 使用 CSV 文件批量创建关系1.3 选择方法 2 索引2.1 创建单一属性索引2.2 创建组合属性索引2.3 创建全文索引2.4 列出所有索引2.5 删除索引2.6 注意事项 3 清空所有数据3.1 删除所有节点和关系3.2 使用 APOC 扩展3.3 重置数据库针对 Neo4j 4.0 及以上版本3.4 删除数据库文件仅适用于本地开发环境3.5 注意事项 1 批量添加节点、关系
1.1 直接使用 UNWIND 批量创建关系
假设你已经有了 100,000 个节点数据和它们之间的关系数据可以使用 UNWIND 语句来批量创建节点和关系。 批量创建节点 首先使用 UNWIND 创建节点。 WITH [{eGuid: guid1, eId: id1, layer: layer1},{eGuid: guid2, eId: id2, layer: layer2},...{eGuid: guid100000, eId: id100000, layer: layer100000}
] AS data
UNWIND data AS row
CREATE (n:Node {eGuid: row.eGuid, eId: row.eId, layer: row.layer})
RETURN count(n)批量创建关系 假设关系数据如下 startGuid,endGuid,relationshipType
guid1,guid2,RELATED_TO
guid3,guid4,CONNECTED_TO
...
guid99999,guid100000,ASSOCIATED_WITH将关系数据存储在一个列表中并使用 UNWIND 创建关系 WITH [{startGuid: guid1, endGuid: guid2, relationshipType: RELATED_TO},{startGuid: guid3, endGuid: guid4, relationshipType: CONNECTED_TO},...{startGuid: guid99999, endGuid: guid100000, relationshipType: ASSOCIATED_WITH}
] AS relationships
UNWIND relationships AS rel
MATCH (startNode:Node {eGuid: rel.startGuid}), (endNode:Node {eGuid: rel.endGuid})
CREATE (startNode)-[r:RELATIONSHIP {type: rel.relationshipType}]-(endNode)
RETURN count(r)C# 代码实现 ListDictionarystring, object nodeData new ListDictionarystring, object{new Dictionarystring, object{{ eGuid, guid },{ eId, id },{ layer, layer },}
};
IResultCursor batchInsertNode await session.RunAsync(UNWIND $nodeData AS rowMERGE (n: PrimitiveNode { eGuid: row.eGuid, eId: row.eId, layer: row.layer})RETURN count(n),new { nodeData });ListDictionarystring, object relationData new ListDictionarystring, object{new Dictionarystring, object{{ startGuid, s_eGuid },{ endGuid, t_eGuid },{ relationName, relation },}
};
IResultCursor batchInsertRelation await session.RunAsync(UNWIND $relationData AS relMATCH (startNode:PrimitiveNode {eGuid: rel.startGuid}), (endNode:PrimitiveNode {eGuid: rel.endGuid})MERGE (startNode)-[r:PrimitiveRelation {name: rel.relationName}]-(endNode),new { relationData });1.2 使用 CSV 文件批量创建关系
如果数据量很大可以将数据存储在 CSV 文件中然后使用 LOAD CSV 导入。 创建 CSV 文件 创建两个 CSV 文件一个用于节点数据另一个用于关系数据。 nodes.csv: eGuid,eId,layer
guid1,id1,layer1
guid2,id2,layer2
...
guid100000,id100000,layer100000relationships.csv: startGuid,endGuid,relationshipType
guid1,guid2,RELATED_TO
guid3,guid4,CONNECTED_TO
...
guid99999,guid100000,ASSOCIATED_WITH加载 CSV 文件并创建节点 LOAD CSV WITH HEADERS FROM file:///nodes.csv AS row
CREATE (:Node {eGuid: row.eGuid, eId: row.eId, layer: row.layer})
RETURN count(*)加载 CSV 文件并创建关系 LOAD CSV WITH HEADERS FROM file:///relationships.csv AS row
MATCH (startNode:Node {eGuid: row.startGuid}), (endNode:Node {eGuid: row.endGuid})
CREATE (startNode)-[r:RELATIONSHIP {type: row.relationshipType}]-(endNode)
RETURN count(r)1.3 选择方法
如果数据结构简单且数据量不大可以直接在 Cypher 查询中使用 UNWIND。对于大量数据CSV 文件导入方法非常高效。使用编程语言的批量插入方法适合需要复杂逻辑处理的数据。
2 索引
2.1 创建单一属性索引
要在单个属性上创建索引可以使用以下命令
CREATE INDEX index_name FOR (n:Label) ON (n.property)例如
CREATE INDEX person_name_index FOR (p:Person) ON (p.name)2.2 创建组合属性索引
要在多个属性上创建组合索引可以使用以下命令
CREATE INDEX index_name FOR (n:Label) ON (n.property1, n.property2)例如
CREATE INDEX person_name_dob_index FOR (p:Person) ON (p.name, p.dob)2.3 创建全文索引
Neo4j 还支持全文索引可以用于全文搜索。要创建全文索引可以使用以下命令
CALL db.index.fulltext.createNodeIndex(index_name, [Label], [property])例如
CALL db.index.fulltext.createNodeIndex(person_name_index, [Person], [name])2.4 列出所有索引
要查看数据库中现有的所有索引可以使用以下命令
CALL db.indexes2.5 删除索引
要删除一个索引可以使用以下命令
DROP INDEX index_name例如
DROP INDEX person_name_index2.6 注意事项
索引创建时间索引的创建可能需要一些时间特别是在包含大量数据的情况下。建议在数据库维护时创建索引。索引类型Neo4j 支持多种类型的索引包括 B-tree 索引、全文索引等。选择适合查询需求的索引类型。版本差异不同版本的 Neo4j 在索引语法和功能上可能有所不同建议查阅对应版本的官方文档以获取准确的信息。
3 清空所有数据
3.1 删除所有节点和关系 删除所有关系 MATCH ()-[r]-()
DELETE r删除所有节点 MATCH (n)
DELETE n该命令尝试直接删除匹配到的节点 n。如果节点 n 还有任何连接的关系这条命令会失败并报错因为 Neo4j 不允许直接删除仍然连接着关系的节点。 使用限制只能删除没有任何关系的孤立节点。 删除所有节点 MATCH (n)
DETACH DELETE n该命令不仅删除匹配到的节点 n还会先删除与该节点连接的所有关系。这样就避免了直接删除节点时可能遇到的错误。 使用优势能够删除任何节点无论它们是否连接着关系。
3.2 使用 APOC 扩展
如果安装了 APOC 扩展可以使用更简便的方法
CALL apoc.periodic.iterate(MATCH (n) RETURN n,DETACH DELETE n,{batchSize: 1000}
)3.3 重置数据库针对 Neo4j 4.0 及以上版本
如果你使用的是 Neo4j 4.0 及以上版本可以使用 dbms.clearDatabase() 命令重置数据库
CALL dbms.clearDatabase()3.4 删除数据库文件仅适用于本地开发环境
如果你在本地开发环境中可以通过删除数据库文件来清空所有数据。这需要停止 Neo4j 服务删除数据库文件然后重新启动服务。 停止 Neo4j 服务 neo4j stop删除数据库文件 默认情况下数据库文件位于 data/databases/ 目录下。例如对于默认数据库 neo4j删除相应文件 rm -rf data/databases/neo4j重新启动 Neo4j 服务 neo4j start3.5 注意事项
备份数据在清空数据之前建议先备份现有数据以防需要恢复。权限确保执行清空数据操作的用户具有足够的权限。环境在生产环境中执行这些操作时要格外小心确保不会影响正常运行的数据和服务。