3

在图形模型中,我有一个名为timeCategorychilds的顶点year-verticesmonth-vertices并且day-vertices. 我可以用 with 来识别一年,用edge-labelwith来识别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);
}

...这对于打印所有属性值(作为整数的年份)非常有用,但我需要的是所有 VERTICES 的列表,其中年份属性在给定范围之间。

我的第二个问题是关于从管道中的值进行交叉。

例如:我有三个管道,一个年管道、一个月管道和一个日管道,这些管道包含标识年、月或日的顶点。

是否有可能让所有传出顶点到一个特殊的日期......

半代码:allVertices2012-01-01 = yearpipe.out() AND monthpipe.out() AND daypipe.out

当然,我可以在一些 for-each 循环中进行一些比较,但我想知道是否有一个(简单的)gremlin - 可以做得更好的方法。

4

2 回答 2

2

There are two solutions to your problem. Here it is in Gremlin-Groovy:

timeCategory.out('IS_YEAR').filter{year = it.getProperty('year'); year < 2013 && year >= 2011} 

-OR-

timeCategory.out('IS_YEAR').property('year').filter{it < 2013 && it >= 2011}.back(1)

Here is your answer in Gremlin-Java code (for the second representation above):

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);
于 2012-01-31T18:19:46.583 回答
0

好的,在阅读了一些简短的教程之后,我发现 .back(x) 上的参数应该是 2 ......所以,使用 .back(2) 你会得到你的顶点。顺便提一句。在我看来, http ://markorodriguez.com 上提供的示例比 github-wiki 上的示例更适合 gremlin 快速入门。

对于我的第二个问题:我发现有一个关于 gremling-users 的主题,很好地描述了我的问题:

http://groups.google.com/group/gremlin-users/browse_thread/thread/d245b1a25ac1fac8/514931b1e3bf9e30?lnk=gst&q=intersect#514931b1e3bf9e30

于 2012-02-03T09:25:42.910 回答