在图模型中,我有一个名为timeCategory
的顶点,它有子级year-vertices
、month-vertices
和day-vertices
。我能够用edge-label
和IS_YEAR
识别一年,用IS_MONTH
识别一个月,等等。
我想做一个查询,返回给定年份范围内的所有顶点,类似于以下代码:
GremlinPipeline yearPipe = new GremlinPipeline(timeCategory).out("IS_YEAR").property("year")
.filter(new PipeFunction<Integer, Boolean>() {
public Boolean compute(Integer i)
{
return i < 2013 && i >= 2011;
}
});
for(Object v : yearPipe) {
//v is an Integer, but i need the vertex
System.out.println(v);
}
这对于打印所有属性值(年份为整数)非常有效,但我需要的是一个在给定范围内的所有年份属性的列表。
我的第二个问题是关于从管道中的值生成交集。
例如:我有三个管道,一个yearpipe、一个monthpipe和daypipe,这些管道包含标识年份、月份或日期的顶点。
是否可以将所有传出的顶点都放到一个特殊的日期。。。
半代码:allVertices22012-01-01=yearpipe.out()AND monthpipe.out)AND daypipe.out
当然,我可以对每个循环进行一些比较,但我想知道是否有一种(简单的)小精灵方法可以做得更好。
您的问题有两种解决方案。它在Gremlin Groovy中:
timeCategory.out('IS_YEAR').filter{year = it.getProperty('year'); year < 2013 && year >= 2011}
-或-
timeCategory.out('IS_YEAR').property('year').filter{it < 2013 && it >= 2011}.back(1)
以下是您在Gremlin Java代码中的答案(对于上面的第二种表示):
GremlinPipeline yearPipe = new GremlinPipeline(timeCategory).out("IS_YEAR").property("year")
.filter(new PipeFunction<Integer, Boolean>() {
public Boolean compute(Integer i)
{
if(i<2013 && i>=2011)
return true;
else
return false;
}
}).back(1);
好的,在阅读了一些简短的教程后,我得出了.back(x)上的参数应该是2……所以,使用.back(2),您将获得顶点。顺便提一下,在http://markorodriguez.com在我看来,对于gremlin快速启动来说,比githubwiki上的这些要好得多。
对于我的第二个问题:我发现有一个关于小精灵用户的主题,它很好地描述了我的问题:
http://groups.google.com/group/gremlin-users/browse_thread/thread/d245b1a25ac1fac8/514931b1e3bf9e30?lnk=gst&q=相交#514931b1e3bf9e30