我正在尝试在Java中创建自己的过程,以便将其用于Neo4j。我想知道如何在Java中执行Cypher代码? 我尝试使用graphDB.execute()函数,但它不起作用。我只想使用Neo4j库在Java中执行一段基本代码。我想要执行的基本代码示例: 编辑 public class Test
{
@Context public GraphDatabaseService graphDb;
@UserFunction
public Result test() {
Result result = graphDb.execute("MATCH (
我使用的是neo4j 2.1.4。我有节点-点和关系-道路我有道路属性的索引- OBJ_COD
:schema ls -l :ROAD
Indexes
ON :ROAD(OBJ_COD) ONLINE
ON :ROAD(ID) ONLINE
No constraints
我想通过OBJ_COD值来搜索道路,但是cypher不使用索引来查找关系。
neo4j-sh (?)$ profile MATCH (a)-[r:`ROAD` {ID:333275}]-(b:`POINT`) RETURN r LIMIT 1;
ColumnFilter
|
+Tra
在Cypher (Neo4j)中,我可以使用id删除关系。但是,当我尝试删除自我关系时,查询会运行很长时间,而关系不会被删除。
我尝试了许多方法:
start r=rel(5828) delete r;
MATCH (p:Person{fid:'60'})-[r:IS_RELATED_TO]->(p:Person{fid:'60'})删除r
match (a:Person)-[rel:IS_RELATED_TO]->(b:Person) where a.fid="60" and ID(rel)=5828 delete re
最近,我将我的Neo4j数据库升级到了V3 (3.0.6)。从那时起,我在尝试删除使用Cypher的节点时遇到了麻烦。这是升级后的一个新问题。他们的查询是:
MATCH (p) WHERE id(p) = 83624
OPTIONAL MATCH (p)-[r]-(n)
OPTIONAL MATCH (p)-[r2]-(n2)
WHERE NOT ('Entity' in labels(n2))
DELETE r, r2, p, n2
这将导致错误Unable to load NODE with id 83624。
使用RETURN而不是DELETE的确切查询返回节点。
我正在尝试使用下面的Cypher查询在Neo4j中计算一个无向图的传递闭包("E“是图的每条边都有的标签):
MATCH (a) -[:E*]- (b) WHERE ID(a) < ID(b) RETURN DISTINCT a, b
我试图在一个有10k个节点和大约15万条边的图上执行这个查询,但即使在8小时后它也没有完成。我对此感到惊讶,因为即使是最简单的SQL解决方案也要快得多,而且我预计Neo4j对于这些标准图形查询会更高效。那么,我是否遗漏了什么,可能是对Neo4j服务器进行了一些调整,或者是编写查询的更好方法?
编辑
以下是对上述查询执行EXPLAIN的结果:
+--
是否有方法根据属性值的类型匹配Neo4j/Cypher中的节点?我在找这样的东西:
MATCH (n:Person)
WHERE NOT(n.id_number isa STRING)
RETURN n
我能想到的最接近的
MATCH (n:Person)
WHERE NOT(n.id_number = toString(n.id_number))
RETURN n
尽管这仍然相当快,但根据概要文件,它不使用索引,而我认为isa-style查询可以使用索引。
我正在为我的大学做一些事情,我被要求创建一个系统,用数百万个节点(至少有100万到200万节点)构建完整的树。我试图使用定期提交来创建带有Load的树,它很好地完成了仅创建节点(普通笔记本上的70000毫秒)的工作。当我对边缘做同样的尝试时,它也没有缩放。
Using periodic commit LOAD CSV WITH HEADERS FROM 'file:///Archi.csv' AS line
Merge (:Vertex {name:line.from})<-[:EDGE {attr1: toFloat(line.attr1), attr2:toFloa