在Neo4J中查找从索引查找的一组节点之间的关系

在Neo4J中查找从索引查找的一组节点之间的关系,neo4j,cypher,Neo4j,Cypher,我将一组ID传递给Neo4J,以便通过索引进行查找。然后我想找到它们之间的公共关系,其中找到的节点集合中的一个节点指向另一个节点。我试图检索路径来实现这一点,但我也希望只检索关系计数(因此关系上的r)的选项。到目前为止,我得到了如下结果: start n = node:idx("MyID:(1 2 3 10000 1500)") MATCH p=(n)<-[r:RELATED_TO]->(n) RETURN p start n=node:idx(“MyID:(12310000 15

我将一组ID传递给Neo4J,以便通过索引进行查找。然后我想找到它们之间的公共关系,其中找到的节点集合中的一个节点指向另一个节点。我试图检索路径来实现这一点,但我也希望只检索关系计数(因此关系上的r)的选项。到目前为止,我得到了如下结果:

start n = node:idx("MyID:(1 2 3 10000 1500)")
MATCH p=(n)<-[r:RELATED_TO]->(n)
RETURN p
start n=node:idx(“MyID:(12310000 1500)”)
匹配p=(n)(n)
返回p
然而,这总是一无所获,即使我确信这里有共同的关系

我环顾四周,但我找不到任何人在Cypher这样做的例子。我将如何实现这一目标?还是有更好的方法


谢谢。

您必须使用索引查找两次:

start n = node:idx("MyID:(1 2 3 10000 1500)"), 
      m = node:idx("MyID:(1 2 3 10000 1500)")
MATCH p=(n)-[r:RELATED_TO]-(m)
RETURN p

您必须使用索引查找两次:

start n = node:idx("MyID:(1 2 3 10000 1500)"), 
      m = node:idx("MyID:(1 2 3 10000 1500)")
MATCH p=(n)-[r:RELATED_TO]-(m)
RETURN p

但是您正在两个索引查找之间创建笛卡尔积

因此,如果这些返回的节点超过5个,它将呈指数增长

您的查询已经进行了25次路径检查(5x5)


根据路径的数量,这可能更便宜。

但您正在两个索引查找之间创建笛卡尔乘积

因此,如果这些返回的节点超过5个,它将呈指数增长

您的查询已经进行了25次路径检查(5x5)


根据路径的数量,这可能会更便宜。

啊,这是有道理的。谢谢这是完全可行的,虽然我将有多达100个ID。在where中有100个ID比100个额外的索引查找便宜吗?很好的捕获-这一个要便宜得多。Craig,是的,否则你会进行100x100=10k的路径检查。因此,您只需遵循100个起始节点的路径,这些节点可能小于10k。啊,这很有意义。谢谢这是完全可行的,虽然我将有多达100个ID。在where中有100个ID比100个额外的索引查找便宜吗?很好的捕获-这一个要便宜得多。Craig,是的,否则你会进行100x100=10k的路径检查。因此,您只需遵循100个起始节点的路径,这些节点可能小于10k。