【发布时间】:2019-01-09 01:10:22
【问题描述】:
总的来说,我是 Graph DBs 的新手,正在尝试学习 Gremlin QL。我想知道是否有一种方法可以直接合并两个已知 id 的顶点的两个直接邻居。例如,在下图中
我不想遍历整个图,我只想让两个子图根据它们的共同邻居进行合并,并根据通向同一个顶点的两条边的权重之和进行排序。
在上图中,当我使用顶点1 and 2 进行查询时,我希望能够显示顶点A, B, C, D。我希望能够合并顶点1和顶点2的outE,聚合(edge 1 -> A and Edge 2 -> A),(edge 1 -> B and Edge 2 -> B),(edge 1 -> C and Edge 2 -> C) and (edge 1 -> D and Edge 2 -> D) 并根据这个组合得分对结果进行排序。
图表创建代码如下
g.addV().property('id',1).property("type","A").as('1')
addV().property('id',2).property("type","B").as('2').
addV().property('id',A).property("type","X").as('A').
addV().property('id',B).property("type","X").as('B').
addV().property('id',C).property("type","X").as('C').
addV().property('id',D).property("type","X").as('D').
addE('connects').from('1').to('A').property("weight",0.1d)
addE('connects').from('1').to('B').property("weight",0.4d)
addE('connects').from('1').to('C').property("weight",0.2d)
addE('connects').from('1').to('D').property("weight",0.7d)
addE('connects').from('2').to('A').property("weight",0.5d)
addE('connects').from('2').to('B').property("weight",0.2d)
addE('connects').from('2').to('C').property("weight",0.7d)
addE('connects').from('2').to('D').property("weight",0.4d).iterate()
如果我用 SQL 来表示上述数据,示例模型如下所示
create table items(id varchar(20), toId varchar(20), weight double(5,4), primary key (id, toId);
insert into items values("1","A",0.1);
insert into items values("1","B",0.4);
insert into items values("1","C",0.2);
insert into items values("1","D",0.7);
insert into items values("2","A",0.5);
insert into items values("2","B",0.2);
insert into items values("2","C",0.7);
insert into items values("2","D",0.4);
select toId, a.weight+b.weight as weight from items a, items b where a.id = "1" and b.id = "2" and a.toId = b.toId order by weight desc;
这通常返回
D, 0.11
C, 0.9
B, 0.6
A, 0.5
非常感谢您对此提供的任何帮助。
【问题讨论】:
-
图片不错,但请您提供一个 Gremlin 脚本来创建一些示例数据 - 这是一个示例 stackoverflow.com/questions/51388315/…
-
根据 Stephen 的评论更新了图表创建
标签: gremlin