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

时间:2014-01-22 11:58:45

标签: neo4j cypher

我将一组ID传递给Neo4J,以便通过索引查找。然后我想找到它们之间的那些常见关系,其中找到的节点集合中的1个节点指向另一个节点。我正在尝试检索执行此操作的路径,但我还想选择仅检索关系计数(因此关系上的r)。到目前为止,我有这样的事情:

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

然而,即使我确定这里有共同的关系,这总是不会返回任何内容。

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

感谢。

2 个答案:

答案 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