我有一个Titan图形数据库,其顶点由一个名为“property1”的属性连接起来。使用Gremlin/TitanDB执行聚合查询
是否可以查询写一个小鬼(或其他任何泰坦将支持),以:
Find all edges that have a value for "property1" that is seen 5 or less times.
在SQL我会使用“分组依据”,MongoDB中我会使用的聚合函数之一。
我在想这可能是Furnace/Faunus的工作?
我有一个Titan图形数据库,其顶点由一个名为“property1”的属性连接起来。使用Gremlin/TitanDB执行聚合查询
是否可以查询写一个小鬼(或其他任何泰坦将支持),以:
Find all edges that have a value for "property1" that is seen 5 or less times.
在SQL我会使用“分组依据”,MongoDB中我会使用的聚合函数之一。
我在想这可能是Furnace/Faunus的工作?
您可以通过迭代所有边缘并使用groupBy
来完成此操作。下面是与地方使用weight
的property1
玩具图为例:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.E.groupBy{it.weight}{it}.cap.next()
==>0.5=[e[7][1-knows->2]]
==>1.0=[e[8][1-knows->4], e[10][4-created->5]]
==>0.4=[e[11][4-created->3], e[9][1-created->3]]
==>0.2=[e[12][6-created->3]]
所以这组由他们weight
所有边缘。从那里你可以下降到标准的常规功能,如findAll
来筛选出你不想要的东西(在这里我筛选出具有>1
边缘的权重......在你的情况下它将是<5
)。
gremlin> g.E.groupBy{it.weight}{it}.cap.next().findAll{k,v->v.size()>1}
==>1.0=[e[8][1-knows->4], e[10][4-created->5]]
==>0.4=[e[11][4-created->3], e[9][1-created->3]]
显然,这是一个真正的大图有点昂贵的操作中,你有很多重复的做了边缘,你必须建立在内存中Map
这可能取决于多样性是大的值在property1
。如果你可以找到方法来限制边缘迭代与其他过滤器,这可能会有所帮助。
如果你有一个非常大的图,这对Faunus来说是一个不错的工作。我会在这里简单回答一下,并简单地说,你不一定希望具有property1
值的特定边缘出现少于5次,并且你只想知道不同property1
值出现的次数。通过Faunus,你可以得到如下发行版:
g.E.property1.groupCount()