我是第一次接触Cypher和Neo4J,我正在为Neo4J做在线入门课程,并来到一个页面,该课程要求寻找在罗宾·威廉姆斯没有出演的电影中与吉恩·哈克曼合作的演员。示例查询是这样的:
MATCH (gene:Person {name:"Gene Hackman"})-[:ACTED_IN]->(movie),
(other)-[:ACTED_IN]->(movie),
(robin:Person {name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(movie)
RETURN DIST
我正在尝试使用下面的Cypher查询在Neo4j中计算一个无向图的传递闭包("E“是图的每条边都有的标签):
MATCH (a) -[:E*]- (b) WHERE ID(a) < ID(b) RETURN DISTINCT a, b
我试图在一个有10k个节点和大约15万条边的图上执行这个查询,但即使在8小时后它也没有完成。我对此感到惊讶,因为即使是最简单的SQL解决方案也要快得多,而且我预计Neo4j对于这些标准图形查询会更高效。那么,我是否遗漏了什么,可能是对Neo4j服务器进行了一些调整,或者是编写查询的更好方法?
编辑
以下是对上述查询执行EXPLAIN的结果:
+--
我有以下Cypher查询(Neo4j),并希望将其转换为Gremlin查询。
MATCH d=(a:Actor {id:" + entityId +'})-[r:ACTING_IN*0..2]-(m) WITH d,
RELATIONSHIPS(d) AS rels WHERE NONE (rel in r WHERE rel.Type = "Hollywood") RETURN *
UNION
MATCH d=(aa:Actor{id: " + entityId + "})-[rel:PRODUCER_OF*0..2]->(mm:Mov
当执行Cypher查询以检索具有自同构的特定子图时,假设
MATCH (a)-[:X]-(b)-[:X]-(c),
RETURN a, b, c
似乎默认的行为是返回每个检索到的子图及其所有的自同构。在该示例中,如果(u)-:X-(v)-:X-(w)是与该模式匹配图,则输出将是u,v,w,但也是w,v,u,它们位于同一图中。
有没有办法让每个子图只检索一次?
编辑:如果Cypher在搜索中有一个功能来做这件事,使用某种对称破坏条件,那就太好了,因为它可以减少计算时间。如果不是这样,您将如何进行后处理以找到所需的输出?
给出具有Activity (蓝色节点)和Gateway (大部分灰色节点)的图
当我执行查询时(activitiNodeId是称为“通知主机管理器”的节点):
MATCH p =(cur:Activity {projectId: '13', activitiNodeId: 'sid-84FC0D7F-9683-4D63-A2EA-A3ABB2AD10AE_0_null'})-[r:PRECEDES*]->(next)
WHERE ANY (label IN labels(next) WHERE label IN ['Activity',
neo4j中的shortestPath( )函数是否使用where条件中提供的过滤条件?我的Cypher查询如下所示:
match (from:startNode{name:'START'}),(to:endNode{name:'END'}),
path = shortestPath(((from)-[:NESTED_JOIN|:REFERENCED_JOIN*1..10]-(to)))
WHERE NONE (n IN nodes(path) WHERE n.type= 'DEACTIVATED') return path
我有一个Neo4j社区3.5.5,在这里我建立了一个包含火车站和车站之间线段的图形数据模型。站点和线路段是节点,连接是连接它们的关系。
我想命名一个起点和终点站和总结长度的所有铁路区段在两者之间。我尝试了下面的Cypher查询,但是Neo4j没有将line_section识别为节点类型。
match (n1:Station)-[:Connect]-(n2:Station)
where n1.Name='Station1' and n2.Name='Station3'
return sum(Line_Section.length)
我知道可以使用Neo4
我刚刚阅读了Neo4j官方文档的。
它展示了一种完全检索朋友朋友的Cypher方法:
MATCH (joe { name: 'Joe' })-[:knows*2..2]-(friend_of_friend)
WHERE NOT (joe)-[:knows]-(friend_of_friend)
RETURN friend_of_friend.name, COUNT(*)
ORDER BY COUNT(*) DESC , friend_of_friend.name
为什么下列方法更快?
MATCH path = shortestPath((joe { name: 'Joe
我是Neo4j和Cypher的新手,正在写我的学士学位论文,在社交网络的情况下,我将关系数据库与Neo4j图形数据库进行了比较。我已经在SQL和Cypher中定义了一些查询,以便在JMETER中通过JDBC和REST API进行性能测试。然而,我在声明Cypher查询以获取节点时遇到了问题,这些节点是某个节点的朋友的共同朋友。
我的第一种方法是这样的:
MATCH (me:Enthusiast {Id: 488})-[:abonniert]->(f:Enthusiast)-[:abonniert]->(fof:Enthusiast)<-[:abonniert]-(f) RET
我能够在Neo4j中使用Cypher-shell成功地运行一系列查询。例如,我将查询放在一个名为“cypher.ex1”的文件中:
LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS row
WITH row.Fname AS first, row.Lname AS last
MERGE (p:la {last: last})
MERGE (o:fi {first: first})
MERGE (c:central {name: "central node"})
MERGE (c)-[r:CONTAINS {fir
我有一个关于使用neo4j数据库的Cypher查询的问题。假设我有多个节点,如(节点:学生会{name:“Alice”})。如何获得密码查询中最频繁出现的名称?
我有一个简单的解决方案:
MATCH (n:student)
RETURN n.name,count(*) as times
ORDER BY times DESC
LIMIT 1;
有没有另一种方法可以获得相同的结果,而不使用ORDER和same子句?例如任何内置函数,如MAX()、..etc
我在Neo4J Cypher 2.0中有以下查询:
MATCH (u:User{uid:'1111111'}), (c1:Concept), (c2:Concept),
c1-[:BY]->u, c2-[:BY]->u, c1-[rel:TO]->c2
WITH c1,c2,rel
MATCH c1-[:AT]->ctx, c2-[:AT]-ctx
WHERE ctx.uid = rel.context
RETURN c1.uid AS source_id, c1.name AS source_name,
c2.uid AS target_id
我正在尝试使用嵌入式neo4j 2.2.1数据库执行cypher查询,并得到类未找到异常:
Exception in thread "main"
java.lang.NoClassDefFoundError: org/neo4j/cypher/internal/CypherOptionParser
at org.neo4j.cypher.ExecutionEngine.createCompiler(ExecutionEngine.scala:212)
at org.neo4j.cypher.ExecutionEngine.<init>(Executi
我们正在尝试执行一个运行Neo4j查询的程序。
使用NetBeans,它成功地执行。但是当我们使用cmd运行它时,它会出现以下错误-
C:\>java -jar "C:\Users\sourabh\Documents\NetBeansProjects\freeb2\dist\freeb2.ja
r"
org.neo4j.cypher.EntityNotFoundException: Node 1 not found
at org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.
我使用来自Scala 2.11.1和Neo4J数据库2.0.3的ne4j-jdbc 2.0.2。虽然通过rest接口向Neo4J服务器发出Cypher查询非常有效,但在嵌入式数据库中使用Cypher查询会失败。在研究了一些Neo4J源代码后,我发现原因在于在ExecutionEngine内部调用执行时的Cypher API内部。我能做些什么来修复它?
def main(args: Array[String]) {
val db = new GraphDatabaseFactory().newEmbeddedDatabase("D:/Datenbanken/neo4j/testsnn
在Neo4j的Cypher查询语言中,一个MATCH子句紧跟在另一个子句后面,如下所示:
MATCH (d:Document{document_ID:2})
MATCH (d)--(s:Sentence)
RETURN d,s
还是同一个MATCH子句中的逗号分隔模式?例如:
MATCH (d:Document{document_ID:2}),(d)--(s:Sentence)
RETURN d,s
在这个简单的例子中,结果是相同的。但是有没有什么“问题”呢?