0

我想知道如何有一个以嵌套格式返回结果的 gremlin 查询。假设有如下属性图:

USER以及PAGE具有某些属性的顶点,例如AGEfor USERvertex;

FOLLOWUSER和之间的边缘PAGE

我正在寻找一个有效的查询,它为所有年龄大于 20 岁的用户以及这些用户所关注的所有页面提供信息。我可以使用应用程序端的一个简单循环来做到这一点,并且每次迭代都使用一个简单的遍历查询。不幸的是,这种解决方案对我来说效率不高,因为它会产生大量查询,并且在这种情况下网络延迟可能会很大。

4

2 回答 2

5

不确定您对“高效”的定义是什么,但请记住,这是一个典型的 OLAP 用例,您不应期望快速 OLTP 实时响应。

也就是说,查询应该很简单:

g.V().has("USER", "AGE", gt(20)).as("user").
  map(out("FOLLOW").fold()).as("pages").
  select("user", "pages")

一个使用现代样本图的小例子:

gremlin> g = TinkerFactory.createModern().traversal().withComputer()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], graphcomputer]
gremlin> g.V().has("person", "age", gt(30)).as("user").
           map(out("created").fold()).as("projects").
           select("user","projects")
==>[user:v[6], projects:[v[3]]]
==>[user:v[4], projects:[v[5], v[3]]]
于 2016-04-17T08:00:50.157 回答
0

这很容易:

g.V().label('user').has('age',gt(20))
.match(__.as('user').out('follows').as('page'))
.select('user','page')

请注意,当您在 gremlin 中使用此查询时,gremlin 会为您提供空指针异常,您可以在代码中使用它并检查“页面”是否存在。

于 2016-04-16T06:52:44.483 回答