假设我在Neo4j中有一个由5个节点组成的集合,使得集合中的每个节点都连接到集合中的至少一个其他节点。我想从Neo4j中提取由节点集合及其交互形成的子图。目前,我正在使用一种真正原始的方法,该方法涉及尝试从系统中的每个节点到每个其他节点查找匹配:
MATCH p=(n)-[]->(m)
WHERE id(n) IN [3,4,5,6,7] AND id(m) IN [3,4,5,6,7]
RETURN relationships(p);
但是,这个查询既冗余又效率低下;它必须遍历集合中每个节点的排列(例如,它将匹配节点#3和#4,以及#4和#3)。是否有更有效的方法来获得这些节点形成的子
我正在设置Neo4j数据库,以收集多个孤立的图(在这些图上,查询可能一起运行,也可能不一起运行)。
例如:
附图中的图是三个完全图的不相交的并,我想对这三个不同的图有三个端点,对于完全图(即所有三个完全图)有一个端点。
runQueryOnSubgraph1?query="Match (n)-->(m) return n;" //output will include the nodes 16 to 35
runQueryOnSubGraph2?query="Match (n) return n;" //output will include the no
如何在2.2B节点上使用集合汇总一对带标签的I?我想滚动两个uids的平面列表,标签将它们连接在一起,而不是重复。我在neo4j中有一个由10个id、9个连接id和1个第一方id组成的图。
我正在尝试创建一个查询,对于通过一个或多个连接I连接的每一对第一方I,我都有一个连接它们的第三方I的列表。
现在,我有一个如下查询:
Match (u:User)-[]->(id)
match (id)<-[]-(u2:User)
where u <> u2 and ID(u) < ID(u2)
return u.uid,u2.uid,labels(id)
limit 100
我希望使用Cypher删除与Neo4j数据库中特定节点相关的连通图。用例是删除一个“开始”节点和所有存在开始节点路径的节点。要限制事务,查询必须是迭代的,不能断开连接图。
到目前为止,我一直在使用以下查询:
OPTIONAL MATCH (start {indexed_prop: $PARAM})--(toDelete)
OPTIONAL MATCH (toDelete)--(toBind)
WHERE NOT(id(start ) = id(toBind)) AND NOT((start)--(toBind))
WITH start, collect(toBind) AS TO_BIND,
我使用Neo4j 2.1.7和Node.js来构建REST。数据--大约70.000个节点和100.000个关系--包含许多小的连通子图。
一个API调用,例如localhost:8000/search?name=Bussum,应该返回名为Bussum的所有节点以及它们所属的连接组件。
说明:
(图片来源于)
我可以通过这样的查询获得所需的所有数据:
MATCH (a {name: "Bussum" })-[r*]-(b)
UNWIND rels AS rel
RETURN distinct startNode(rel) AS a, type(rel), endN
到目前为止,我用两种方式查询neo4j图db,
使用服务器,其中我需要选择数据库,启动服务器,并通过网页查询。
使用Java,其中选择数据库路径,创建数据库对象并执行查询。
现在,我将从MySQL转移到Neo4j,在那里我必须复制这些数据库并执行连接查询。
我最初的想法是将MySQL中的每个数据库复制为Neo4j中的图形数据库。但是,我对一次查询两个不同图的没有任何线索。
直截了当地提出我的问题:
How to perform join query on two different graphs in neo4j?
我有一个错误,当SQLAlchemy产生错误的SQL查询,但我不能确定条件。
我使用Flask-SQLAlchemy,最初它只是一个MyModel.query,它由简单的SELECT和JOINs表示。但是当应用.limit()方法时,它会转换并使用子查询来获取主对象,然后才会应用连接。问题出在ORDER BY语句中,该语句保持不变并忽略子查询定义。
下面是示例,我已经简化了选择字段:
-- Initially
SELECT *
FROM customer_rates
LEFT OUTER JOIN seasons AS seasons_1 ON seasons_1.id = customer_
我在Neo4J (社区版本2.1.6)中有一个图,它有一个特定类型的节点TypeX,我想删除它的所有实例,用保留现有连通性的边替换它的位置。从概念上讲,这类似于TypeX表示多边,并将其替换为连接到该多边的完全连接的节点的子图。
我尝试使用以下Cypher查询,但遇到了事务问题:
MATCH (c)-[e1]-(a:TypeX)-[e2]-(b)
CREATE UNIQUE c-[:CONNECTED_TO]-b
DELETE a, e1, e2;
+-------------------+
| No data returned. |
+-------------------+
Relatio
如何构建Neo4J查询:
1)是否会返回任意一对节点通过一定数量的不同关系连接的所有节点?例如,由2、3或5种不同关系连接的节点?因此,与返回具有未知关系数的连接节点的查询不同:
MATCH (n)-[r]->(m) RETURN n, r, m;
在一般情况下,对于任意一对节点由n> K、n=L或n<M关系连接的子图,将如何查询?
我正在尝试使用下面的Cypher查询在Neo4j中计算一个无向图的传递闭包("E“是图的每条边都有的标签):
MATCH (a) -[:E*]- (b) WHERE ID(a) < ID(b) RETURN DISTINCT a, b
我试图在一个有10k个节点和大约15万条边的图上执行这个查询,但即使在8小时后它也没有完成。我对此感到惊讶,因为即使是最简单的SQL解决方案也要快得多,而且我预计Neo4j对于这些标准图形查询会更高效。那么,我是否遗漏了什么,可能是对Neo4j服务器进行了一些调整,或者是编写查询的更好方法?
编辑
以下是对上述查询执行EXPLAIN的结果:
+--
当执行Cypher查询以检索具有自同构的特定子图时,假设
MATCH (a)-[:X]-(b)-[:X]-(c),
RETURN a, b, c
似乎默认的行为是返回每个检索到的子图及其所有的自同构。在该示例中,如果(u)-:X-(v)-:X-(w)是与该模式匹配图,则输出将是u,v,w,但也是w,v,u,它们位于同一图中。
有没有办法让每个子图只检索一次?
编辑:如果Cypher在搜索中有一个功能来做这件事,使用某种对称破坏条件,那就太好了,因为它可以减少计算时间。如果不是这样,您将如何进行后处理以找到所需的输出?
Neo4j有一个“连接结果节点”复选框选项,我收集到这个选项后,会在最初的查询之后运行第二个查询来连接节点。 例如 MATCH (n:User)
where n.Verified = 'false'
return n
order by n.followers DESC
Limit 40 该查询返回40个相互连接的节点。虽然这可以在Neo4j浏览器中工作,但我不能让它在Neo4j bloom中连接。那么问题是,在幕后连接结果节点的第二个查询是什么? 谢谢
我如何在Flask中创建一个与两个数据库对话的模型,其中一个是sqlite,另一个是专门的neo4j?
我希望在传统的数据库中有登录和密码的东西,并在neo4j中保留其他图形信息。有人告诉我,neo4j不适合需要大的图遍历的东西。也许我需要这个是错误的,但我有一个例子,我想说这样的话..."return a dict(person.x,person.y,person.z) from all nodes where type==person",然后将其输入到我的索引页面的视图中。
我已经看到了与neo4j有关的ORM的相关问题:
...and关于Flask中的多个DB:
具体地说
我一边玩狗的谱系图,一边学习Neo4j。下面的查询给出了与多个节点具有:PARENT_OF关系的所有节点。
match (n)-[r:PARENT_OF]->() with n, count(r) as rel_cnt where rel_cnt > 1 return n;
对于示例图,这将生成两个节点。现在我想把它与下一个查询结合起来,以获得一个固定的子对象(A)和一个变量父对象(第一个查询的结果)之间的路径:
match p =(child:Dog {name: "A"})<-[:PARENT_OF*0..]-(parent:Dog {name: "