【发布时间】:2021-08-25 23:22:25
【问题描述】:
我需要所有蓝色节点或树中不同节点之间 id 匹配的节点,基于最大级别。我有这个代码
GraphTraversal<Vertex, Map<String, List>> values = graphDbConnection.getGraphTraversalSource().V()
.hasLabel('uuid').has('uuid', uuid).emit()
.repeat(in().choose(values('color').is('blue'), identity(), in()))
.times(levels)
.map(or(has('color', 'blue'),
has('uuid', uuid)))
.valueMap('uuid', 'color');
如果一个蓝色节点和另一个蓝色节点之间的错误节点超过 3 或 4 个,算法将忽略最后一个可能的节点。
例如,使用该代码,如果我从uuid=1 询问所有蓝调以上四个级别,包括一个级别,它将返回 1、2、3 并且不会返回 4,因为 3 和 4 之间是 3 个黑色。
但是对于这个例子,它将返回 1,2,3,4,因为 3 和 4 之间只是一两个不正确的节点
注意:这里有一个细节,如果我删除times(levels)调用,无论中间有多少错误颜色都会显示所有蓝色但没有停止条件,这是关键。
【问题讨论】:
-
地球上可能有几个人可以在几分钟内用 gremlin 编写您的请求。我宁愿建议您以 .path().by(__.valueMap('uuid', 'color')) gremlin 步骤结束查询。返回的列表很容易在常规 java 中过滤以获得所需的结果。
-
非常感谢@HadoopMarc,我会尝试你的建议,但我已经有办法在 java 中管理这种情况,我正在尝试使用提供的工具找到最好的直接方法小鬼。谢谢!
-
我找到了原因,只是不知道如何解决。问题出在
.repeat(in().choose(values('color').is('blue'), identity(), in()))这部分,它不仅发出蓝色,而且也发出少量黑色,所以当时间达到最大级别时,有一些级别不是蓝色并且计数,然后当地图到达时,没有蓝色出来但并非所有级别都用蓝色填充。
标签: java gremlin graph-databases janusgraph