我正在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(),因此花费了相当长的时间。我想它首先会对所有可能的解决方案进行随机排序,然后返回该解决方案。
您认为,有一种方法可以产生耗时更少的随机解决方案?
感谢您的时间和未来的答案
答案 0 :(得分:0)
我刚刚与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
然后从0到rd
之间选择一个随机数N
并执行以下请求:
FOR obj IN ANY '${vertex}' hasClipped OPTIONS {bfs : true, uniqueVertices : 'path'}
LIMIT ${rd}, 1
RETURN obj
此请求将返回现有邻居中的一个随机邻居。
迭代以您想要的深度随机行走。