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