查找图形上共享一组公共路径的所有顶点



我正在研究一种概念验证,它可以在N个维度层次结构中聚合用户评论。这个想法是,当在应用程序中查看报告时,用户会对一些数据发表评论。该注释的坐标将存储为图形。同样,维度成员之间的关系也会发生变化。存储在图形中。然后,当用户请求基于给定交集的注释时,应用程序将显示该数据点和层次结构中相关数据点上的所有注释。

样本报告

示例图:

g.addV('Comment')
.property(id, '1')
.property('author', 'john')
.property('content','why is the revenue so high?')
.next()
g.addV('Comment')
.property(id, '8')
.property('author', 'mary')
.property('content','refunds lower than expected')
.next()
g.addV('Element')
.property(id, '2')
.property('name', 'sales revenue')
.property('dimension', 'account')
.property('hierarchy','account')
.next()
g.addV('Element')
.property(id, '3')
.property('name', 'gross revenue')
.property('dimension', 'account')
.property('hierarchy','account').next()
g.addV('Element')
.property(id, '4')
.property('name', 'net revenue')
.property('dimension', 'account')
.property('hierarchy','account').next()
g.addV('Element')
.property(id, '5')
.property('name', 'NY')
.property('dimension', 'location')
.property('hierarchy','location').next()
g.addV('Element')
.property(id, '6')
.property('name', 'NE')
.property('dimension', 'location')
.property('hierarchy','location').next()
g.addV('Element')
.property(id, '7')
.property('name', 'US')
.property('dimension', 'location')
.property('hierarchy','location').next()

g.V('3').addE('parent').to(__.V('2')).property('weight',1.0).next()
g.V('4').addE('parent').to(__.V('3')).property('weight',1.0).next()
g.V('6').addE('parent').to(__.V('5')).property('weight',1.0).next()
g.V('7').addE('parent').to(__.V('6')).property('weight',1.0).next()
g.V('2').addE('dimension').to(__.V('1')).property('weight',1.0).next()
g.V('5').addE('dimension').to(__.V('1')).property('weight',1.0).next()
g.V('4').addE('dimension').to(__.V('8')).property('weight',1.0).next()
g.V('5').addE('dimension').to(__.V('8')).property('weight',1.0).next()

我正在尝试编写一个查询(gremlin或cypher(,它将返回给定元素顶点集合的所有注释。

  • 给定";销售收入;以及";NY";查询应返回1条注释
  • 给定";销售收入;以及";US";查询应返回1条注释,遍历所有注释父链接可查找注释
  • 给定";净收入;以及";US";查询应该返回遍历所有父链接的2个评论,在"0"的交叉点找到1个评论;净收入和纽约";另一个在";NY和销售收入">

我是gremlin和cypher的新手,所以在测试中,我能够从元素顶点开始并循环查找注释,但这就是我成功的终点。

谢谢!

玩了一段时间后,我发现这在openCypher中更容易表达。对于任何试图解决类似问题的人:

MATCH (c:Comment)<-[*1..]-(e1:Element {name: 'net revenue'})
MATCH (c:Comment)<-[*1..]-(e2:Element {name: 'US'})
OPTIONAL MATCH (c)<-[rel:reply*1..]-(r:Comment)
RETURN c,rel,r

它将需要大量的规模和性能测试,但这是一个良好的开端。

最新更新