Search code examples
gremlin

gremlin filter() in query is applied on PROPERTY as well


TinkerPop Gremlin server: 3.3.3 Remote Client: v 3.3.3 It seems like the groovy closure is applied on the Property Name as well in gremlin query. This indicates that the query responds with all Vertices that match the Label alone. When I apply below query; I get

gremlin> client.submit("g.V().hasLabel('XYZ').filter{it.get().property('SCOPE').toString().contains('SCOPE')}") ==>result{object=v[352] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[325] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[267] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[306] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[371] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[248] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[287] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex}


Solution

  • I'm not clear what you're trying to accomplish here, but if "SCOPE" is a property key on all of those returned vertices then filter() is working as expected. Consider your traversal in the context of the "modern" toy graph:

    gremlin> g.V().hasLabel('person').map{it.get().property('name').toString()}
    ==>vp[name->marko]
    ==>vp[name->vadas]
    ==>vp[name->josh]
    ==>vp[name->peter]
    gremlin> g.V().hasLabel('person').filter{it.get().property('name').toString().contains('name')}
    ==>v[1]
    ==>v[2]
    ==>v[4]
    ==>v[6]
    

    The "name" property is available as a key on all of those vertices so it allows all "person" vertices past the filter().