我正在研究ArangoDB上的图形数据库,我正试图通过随机游走路径。我的目的是从起点顶点V,我得到例如4个具有指定深度的随机路径。
到目前为止,我发现以下代码有效:
FOR vertex, edge, path IN 4..4 ANY 'Vertex/417438' edge_collection OPTIONS {bfs: TRUE, uniqueVertices : True, uniqueEdges : True}
SORT RAND()
LIMIT 3
FILTER IS_SAME_COLLECTION('Vertex', vertex)
RETURN path
这确实给了我3条深度为4的路径,但是由于SORT RAND()在开始时需要相当长的时间。我想它首先随机排序所有可能的解决方案,然后返回解决方案。
你认为,有一种方法可以让随机解决方案花费更少的时间吗?
感谢您的时间和期待答案
我刚刚和Arango开发团队的人讨论过。目前无法在AQL中获取随机节点。然而,它在路线图中。
我发现了一种在ArangoDB上随机漫游的方法。
让我们把v
作为起始顶点。
N
的邻居v
的数量:
FOR clip, edge, path IN ANY '${vertex}' hasClipped OPTIONS {bfs: TRUE, uniqueVertices : True, uniqueEdges : True}
COLLECT WITH COUNT INTO len
RETURN len
rd
之间选择一个随机数N
并执行以下请求:
FOR obj IN ANY '${vertex}' hasClipped OPTIONS {bfs : true, uniqueVertices : 'path'}
LIMIT ${rd}, 1
RETURN obj
此请求将返回现有邻居中的随机邻居。