我们有下面的图表。
gremlin>g.V().has('name','alice').repeat(outE().has('tag','ruby').inV()).times(3).emit().group().by('name').by(path().unfold().has('value').values('value').fold()).next()
==>bobby=[9]
==>cindy=[8, 9, 8]
==>david=[8, 7, 9, 8, 7]
在脚本下方,我们可以获得所有路径的权重。
gremlin>g.V().has('name','alice').repeat(outE().has('tag','ruby').inV()).times(3).emit().group().by('name').by(path().unfold().has('value').values('value').sum()).next()
==>bobby=9 sum[9]
==>cindy=25 sum[8, 9, 8]
==>david=39 sum[8, 7, 9, 8, 7]
下面我们可以总结所有路径的权重。
==>bobby=[9] = 9*1
==>cindy=[8, 9, 8] = 8*1 + 9*0.5 + 8*0.25
==>david=[8, 7, 9, 8, 7] = 8*1 + 7*0.5 + 9*0.25 + 8*0.125 + 7*0.0625
我的问题是如何用系数求和权重? 如下所示
type message struct {
Data string `json:"data"`
}
func test(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
data := // Retrieve message that contain backslash
json.NewEncoder(w).Encode(message{Data: data})
}
另一个请求是系数是否来自edge property co?
非常感谢您的帮助!
答案 0 :(得分:3)
尽可能防止lambda。
gremlin> g.withSack(1.0).V().has("name","alice").
repeat(outE("rates").has("tag","ruby").
project("a","b","c").
by(inV()).
by(sack()).
by("value").as("x").
select("a").
sack(mult).by(constant(0.5))).
times(3).emit().
select(all, "x").
project("name","score").
by(tail(local, 1).select("a").values("name")).
by(unfold().
sack(assign).by(select("b")).
sack(mult).by(select("c")).
sack().sum())
==>[name:bobby,score:9.0]
==>[name:cindy,score:13.00]
==>[name:david,score:14.750]
此查询返回的结果与您提供的示例略有不同,但这只是因为您的查询显示的结果不是使用提供的示例图生成的。
答案 1 :(得分:1)
您可以执行类似g.V().has('name','alice').repeat(outE().has('tag','ruby').inV()).times(3).emit().group().by('name').by(path().unfold().has('value').values('value').fold()).next().collect{k, v -> v.withIndex().collect {Integer it, Integer idx -> return it * (1/(idx + 1))}.inject(0.0) {acc,i -> acc+i}}
的操作。不要忘记,您也在使用groovy编程语言,因此您可以访问这些功能。