我有一个简单的图表,父母和孩子是顶点。 父母与子女有“isParentOf”的关系。 顶点都有一个属性:“familyName”。
我想使用gremlin来匹配孩子的姓氏与他们不同的所有父母。
注意:我不能使用Gremlin的Groovy语法。我必须只使用纯Java代码。
答案 0 :(得分:0)
GremlinPipeline应如下所示:
问题出在最后一步。当这个管道步骤只能访问(来自上一步,也就是说)孩子的时候,如何检索父母" familyName"?
我的回答:
无法在过滤器的PipeFunction中访问GremlinPipeline的先前步骤。但是如果你使用PipesFunction就可以了(请注意' s'!)。
让我们看一下javadoc here:
public PipesFunction extends PipeFunction{
public AsMap getAsMap();
}
所以你应该像这样设置GremlinPipeline:
使用像这样的PipesFunction过滤孩子:
.filter(new PipesFunction<Vertex,Boolean>()
{
public Boolean compute(Vertex child) {
return parentHasDifferentFamilyName(child);
}
private Boolean parentHasDifferentFamilyName(child){
Vertex theParent = getAsMap().get("theParent");
String theParentFamilyName = theParent.getProperty("familyName");
String childFamilyName = child.getParameter("familyName");
return !(childFamilyName.equals(parentFamilyName));
}
})
注意:在步骤4中,我们可以检索&#34; theParent&#34;顶点得益于getAsMap()方法,并且感谢第2步(隐含地填充了&#34; As&#34; map)。