How to choose right nodes in janusgraph(如何在janusgraph中选择正确的节点)
问题描述
我需要所有蓝色节点或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黑色。
注意:这里有一个细节,如果我移除times(levels)
调用,无论中间有多少错误的颜色,都会显示所有蓝色,但没有停止条件,这是关键。
推荐答案
问题是,当您遇到黑色节点时,如第二张图所示,您将执行in
,但在每次重复开始时,您将执行另一个in
。因此,如果蓝色节点之后的节点是黑色的,它现在也将被发射。解决此问题的一种可能方法是沿emit(has('color','blue'))
的线条更改emit
,以便只保留蓝色的节点。
这里有一个简单的例子,希望能清楚地显示emit
的这种用法。
g.addV('blue').as('b1').
addV('red').as('r1').
addV('blue').as('b2').
addV('red').as('r2').
addV('blue').as('b3').
addE('link').from('b1').to('r1').
addE('link').from('r1').to('b2').
addE('link').from('b2').to('r2').
addE('link').from('r2').to('b3')
使用这种方法最有可能简化您的查询。
gremlin> g.V()
==>v[42762]
==>v[42763]
==>v[42764]
==>v[42765]
==>v[42766]
gremlin> g.V(42762).emit(hasLabel('blue')).repeat(out()).times(4).label()
==>blue
==>blue
==>blue
gremlin> g.V(42762).emit().repeat(out()).times(4).label()
==>blue
==>red
==>blue
==>red
==>blue
最后是添加了choose
步骤的相同示例。
gremlin> g.V(42762).emit(hasLabel('blue')).repeat(out().choose(hasLabel('blue'),identity(),out())).times(2).label()
==>blue
==>blue
==>blue
这篇关于如何在janusgraph中选择正确的节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在janusgraph中选择正确的节点


基础教程推荐
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01