我必须实时对 neo4j 图进行遍历。该图包含大约 200,000 个节点和 300,000 个关系。我主要关心的是结果应该超级快。
我应该用 Java 编写遍历算法吗?使用 python(py2neo 或bulbflow)是否有明显的性能问题?如果python和java的性能相同,我个人更喜欢这里的python。
我的人员和部门具有以下可能的关系
(p:Person)-[:WORKS_IN]->(d:Department)
(employee:Person)-[:REPORTS_TO]->(manager:Person)
(child:Department)-[:UNIT_OF]->(parent:Department)
Run Code Online (Sandbox Code Playgroud)
我没有获得识别特定部门经理的信息,但是在任何部门中,关系最为密切的[:REPORTS_TO]人都是老板。我正在尝试获取与该部门中“报告给”最多的人匹配的所有部门的列表,但是我却非常失败。
更复杂的是,部门内有“非部门”子组,其定义是一个人可以向部门中不是部门经理的人报告。
我正在寻找一种输出所有部门ID的列表的方法,该列表具有该部门中报告最多的员工的ID。每个部门一行是理想的。
谢谢
我正在使用neo4j来开发概念验证,我希望获得从我的根节点到叶子的所有路径的所有节点ID,例如使用id:
ROOT1-->N1--->SN2--->L1
ROOT1-->N2--->SN3--->L3
Run Code Online (Sandbox Code Playgroud)
我想在结果查询中得到的是: ROO1,N1,SN2 and ROOT1,N2,SN3
我是cypher的新手,我很难得到这个结果,任何帮助都会有用.
我试图解决这个简单的问题,如果在一个有"知道"关系的图形中,某个人A知道某个人B.理想情况下,我会用真或假回答这个问题,但我没有解决这个问题.
我在另一个StackOverflow问题中发现了以下内容,这几乎是我想要的,除了回答我的问题之外,它还会更改图表:
MATCH (p:Person {userId: {0}}), (b:Person {userId: {1}})
MERGE (p)-[r:KNOWS]->(b)
ON CREATE SET r.alreadyExisted=false
ON MATCH SET r.alreadyExisted=true
RETURN r.alreadyExisted;
Run Code Online (Sandbox Code Playgroud)
最后我想把它放在像这样的Spring Neo4J存储库中
public interface PersonRepository extends GraphRepository<Person> {
boolean knows(final Long me, final Long other);
}
Run Code Online (Sandbox Code Playgroud)
这意味着如果有一种方法可以在没有cypher的情况下使用Spring Query和Finder方法,那也没关系.
我已将uuid属性添加到我的SDN 4 Base实体,所以现在它看起来像:
@NodeEntity
public abstract class BaseEntity {
@GraphId
private Long id;
@Index(unique = true, primary = true)
private String uuid;
...
}
Run Code Online (Sandbox Code Playgroud)
现在我的一些测试停止了工作.
我有一个Commentable抽象类:
@NodeEntity
public abstract class Commentable extends BaseEntity {
private final static String COMMENTED_ON = "COMMENTED_ON";
@Relationship(type = COMMENTED_ON, direction = Relationship.INCOMING)
private Set<Comment> comments = new HashSet<>();
public Set<Comment> getComments() {
return comments;
}
public void addComment(Comment comment) {
if (comment != null) {
comments.add(comment);
}
}
public void removeComment(Comment comment) { …Run Code Online (Sandbox Code Playgroud) 我想使用cypher返回某种形式的东西:
{
name: 'Name of Parent Node',
property1 : 'some property of parent node',
property2 : 'some other property'
children: [...some array of children...]
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经完成了以下工作:
MATCH (p:Parent)-[:SOME_RELATIONSHIP]->(c:Child)
WITH collect(c) as children, p
RETURN {properties: properties(p), children: children}
Run Code Online (Sandbox Code Playgroud)
哪种有点类似于我想要的,但不完全相同。有没有一种方法可以将其合并或合并,以使属性组合在一起?
喂,
我想匹配一个节点可以是typeX或typeY的图,我的第一个想法是:
match (:typeX|typeY)-[]-(z) return z
Run Code Online (Sandbox Code Playgroud)
但这不起作用:(
有什么方法可以不键入查询两次?像这样:
match (:typeX)-[]-(z), (:typeY)-[]-(z) return z
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?先感谢您 :)
我的 Neo4j 3 有节点和关系,我必须在图形视图中查看所有没有关系的节点。我使用过,Match(n) return n但它返回了所有节点和关系。如何只查看没有关系的节点?
我想从 csv 文件读取到我的数据库并创建节点和连接。对于要创建的订单节点,要读取的字段之一是产品的填充列表(关系键),即看起来像这样"[123,456,789]",其中数字是产品 ID。
现在将数据读入数据库,我可以毫无问题地为订单和产品创建节点;进行另一次迭代我现在想通过展开订单中的产品列表并链接到相应的产品来创建边缘。
最好是,如果我可以在订单节点的创建时将包含列表的字符串转换为整数列表,以便对这些值进行简单循环并匹配产品节点就可以解决问题(也为了存储效率)会更好)。
但是我无法弄清楚如何将所述字符串转换为包含整数的列表的所述格式。我为此想出一个密码的所有尝试都失败了。我将在下面发布其中一些,从字符串开始l:
WITH '[123,456,789]' as l
WITH split(replace(replace(l,'[',''),']',''),',') as s
UNWIND s as ss
COLLECT(toInteger(ss) ) as k
return k
WITH '[123,456,789]' as l
WITH split(replace(replace(l,'[',''),']',''),',') as s, [] as k
FOREACH(ss IN s| SET k = k + toInteger(ss) )
return k
Run Code Online (Sandbox Code Playgroud)
两个语句都失败了。
我找到了一个部分解决方案,但我不太满意,因为它仅适用于我手头的任务,但不是解决此列表转换的更一般问题的解决方案。
我发现可以创建一个空列表作为节点的属性,它可以连续更新:
CREATE (o:Order {k: []})
WITH o, '[123,456]' as l
WITH o, split(replace(replace(l,'[',''),']',''),',') as s
FOREACH(ss IN s | SET o.k= o.k + …Run Code Online (Sandbox Code Playgroud) 我有一个连接到 Neo4j 数据库的 MVC Asp.Net 应用程序。在我的数据库中,实体(m:Movie)<-[r:HAS_WATCHED_MOVIE]-(u:User)之间存在关系。movieuser
我想要做的是按降序返回一个IEnumerable<Movie>包含前 3 部电影(顶级电影是HAS_WATCHED_MOVIE关系最多的电影)。
我已经想出了一个 Cypher 查询来做到这一点,它是这样的:
MATCH (m:Movie)<-[r:HAS_WATCHED_MOVIE]-(b)
RETURN m, COUNT(r)
ORDER BY COUNT(r) DESC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
由于我是 Neo4j C# 客户端的新手,我不确定如何在 C# 中编写此查询?