投影图neo4j上的度中心性。创建投影图的最佳方法

投影图neo4j上的度中心性。创建投影图的最佳方法,neo4j,graph-algorithm,Neo4j,Graph Algorithm,我正在尝试图形算法 我的模型有几个节点和关系标签,其中一个是“实体”,让我们称其他标签为“随机” 我想创建的是图形的投影,它基本上删除了除“实体”之外的所有其他节点,但保留了节点可能存在的边/关系 e、 如果我们有(e1:Entity)->(:Random)->(:Random)->(e2:Entity),那么结果就是(e1)->(e2) 或 (e1:Entity)-[*…5]-(e1:Entity)为我们提供了(e1)-(e2) 其中两个实体之间的路径之间没有实体 我目前的cypher声明的问

我正在尝试图形算法

我的模型有几个节点和关系标签,其中一个是“实体”,让我们称其他标签为“随机”

我想创建的是图形的投影,它基本上删除了除“实体”之外的所有其他节点,但保留了节点可能存在的边/关系

e、 如果我们有
(e1:Entity)->(:Random)->(:Random)->(e2:Entity)
,那么结果就是
(e1)->(e2)

(e1:Entity)-[*…5]-(e1:Entity)
为我们提供了
(e1)-(e2)

其中两个实体之间的路径之间没有实体

我目前的cypher声明的问题是,它似乎很慢,或者没有返回我所期望的内容。所以我想知道我是否错过了什么

这是我当前用于创建投影的内容:

MATCH p = (start:Entity)-[*..5]-(end:Entity)
WHERE start.id <> end.id
WITH start, end, [n IN nodes(p) WHERE 'Entity' in labels(n) | n] as entities
WHERE size(entities) = 2
RETURN id(start) as source, id(end) as target
MATCH p=(开始:实体)-[*…5](结束:实体)
其中start.id end.id
使用start、end、[n在节点(p)中,其中标签(n)|n]中的“实体”作为实体
其中大小(实体)=2
返回id(开始)作为源,id(结束)作为目标
您的用例(查找和测试以
实体
节点结尾的所有长度不超过5的路径)本身就很昂贵

也就是说,下面的查询应该更快一些

  • 此查询仅测试内部路径节点的标签
  • 由于您的查询是非定向的,因此此查询避免了对同一路径进行两次标签测试(通过
    start.id>end.id
    test)
  • 它避免了创建临时节点集合和评估其大小

    MATCH p = (start:Entity)-[*..5]-(end:Entity)
    WHERE start.id > end.id AND NONE(n IN NODES(p)[1..-1] WHERE 'Entity' in LABELS(n))
    RETURN ID(start) as source, ID(end) as target