我有一个图形数据库,有200多万个节点。我有一个应用程序,它使用一个社交图,并对它做一些推断。作为算法的一步,我必须得到一个关系的所有可能的组合:两个连接节点的朋友。目前,我有一个类似于: match (a)-:friend-(c),(b)-:friend-(d)的查询,其中id(a)={ida}和id(b)={idb}返回不同的c作为第一,d作为第二。
因此,我已经知道了节点a
和b
,并且我想从a
和b
的朋友那里得到所有可能的配对。这显然是一项非常缓慢的行动。我想知道在neo4j中是否有更有效的方法来获得同样的结果。添加索引也许会有帮助吗?欢迎任何想法或线索!
示例 Node a
有朋友:x
,y
Node b
有朋友:g
、h
、i`` Then the result should be:
x,
g ,
h,
id16g,
h>d18i`
发布于 2014-11-05 16:03:35
如果尚未使用标签,则应使用标签来加快查询速度,这可能如下所示:
MATCH (p1:Person)-[:FRIEND]->(p3:Person),(p2:Person)-[:FRIEND]->(p4:Person)
WHERE ID(p1) = 6 AND ID(p2) = 7
RETURN p3 as first, p4 as second
显然,这将取决于您已经使用:Person
标签创建了节点。
平均节点有多少个朋友?
发布于 2014-11-16 09:54:30
我不会使用两种模式,而只使用一种和IN
操作符。
MATCH (p:Person)-[:FRIEND]->(friend:Person)
WHERE id(p) IN [1,2,3]
RETURN p, collect(friend) as friends
然后,你没有交叉产品,你也可以很好地返回朋友作为收集每人。
https://stackoverflow.com/questions/26759077
复制相似问题