我将一组ID传递给Neo4J,以便通过索引查找。然后我想找到它们之间的那些常见关系,其中找到的节点集合中的1个节点指向另一个节点。我正在尝试检索执行此操作的路径,但我还想选择仅检索关系计数(因此关系上的r)。到目前为止,我有这样的事情:
start n = node:idx("MyID:(1 2 3 10000 1500)")
MATCH p=(n)<-[r:RELATED_TO]->(n)
RETURN p
然而,即使我确定这里有共同的关系,这总是不会返回任何内容。
我环顾四周,但在Cypher找不到任何人这样做的例子。我将如何实现这一目标?或者有更好的方法吗?
感谢。
答案 0 :(得分:4)
但是你要在两个索引查找之间创建一个笛卡尔积。
因此,如果那些返回超过5个节点,它将呈指数级增长。
您的查询已经进行了25次路径检查(5x5)。
START n = node:idx("MyID:(1 2 3 10000 1500)")
MATCH p=(n)-[r:RELATED_TO]-(m)
WHERE m.MyId IN [1,2,3,10000,1500]
RETURN p
根据路径的数量,这可能会更便宜。
答案 1 :(得分:1)
您必须使用索引查找两次:
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