[ https://issues.apache.org/jira/browse/TINKERPOP-1463?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16373519#comment-16373519 ]
stephen mallette edited comment on TINKERPOP-1463 at 2/22/18 9:46 PM: ---------------------------------------------------------------------- I'll let [~dkuppitz] say otherwise/more, but I understood that we were doing this: > It would make more sense if the filter-traversal would at least start from > the property, not from the value. Then we could use it to filter vertices > based on meta-properties. > Will these automagically become index lookups or will the vendor have to > implement something? I don't think those will turn into index lookups automatically because that overload of {{has()}} will use {{TraversalFilterStep}} and I'm guessing that most graph systems won't fold that up with their strategies.When we make this change we should probably make a note in the upgrade docs to providers to take better note of this version of {{has()}}. was (Author: spmallette): I'll let [~dkuppitz] say otherwise/more, but I understood that we were doing this: > It would make more sense if the filter-traversal would at least start from > the property, not from the value. Then we could use it to filter vertices > based on meta-properties. > Will these automagically become index lookups or will the vendor have to > implement something? I don't think those will turn into index lookups automatically because that overload of {{has()}} will use {{TraversalFilterStep}} and I'm guessing that most graph systems won't fold that up with their strategies. > Improve has(propertyKey, traversal) > ----------------------------------- > > Key: TINKERPOP-1463 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1463 > Project: TinkerPop > Issue Type: Improvement > Components: process > Affects Versions: 3.2.5 > Reporter: Daniel Kuppitz > Priority: Major > > Two issues here: > {{.has(propertyKey, traversal)}} kinda doesn't work as expected: > {code} > gremlin> g = TinkerFactory.createModern().traversal() > ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] > gremlin> g.addV(label, "software", "lang", "python") > ==>v[12] > gremlin> g.V().has("name","lop").values("lang").as("l").V().has("lang", > select("l")) > ==>v[3] > ==>v[5] > ==>v[12] > gremlin> g.V().has("name","lop").values("lang").as("l").V().has("lang", > __.where(eq("l"))) > ==>v[3] > ==>v[5] > {code} > From a user perspective {{.has("lang", select("l"))}} is / would be > self-explanatory, {{.has("lang", __.where(eq("l")))}} on the other hand is > confusing and I don't see good use-cases for it, as you could also write: > {code} > g.V().has("name","lop").values("lang").as("l").V().where(values("lang").as("l")) > {code} > The second issue or follow-up issue is, that has-traversal should be folded > into the {{GraphStep}}, so that the mid-traversal {{V()}} is not a full graph > scan. Given the traversal: > {code} > g.V().has("name","lop").values("lang").as("l").V().has("lang", select("l")) > {code} > ... we would know the value of {{"l"}} at runtime. Thus it's not much > different from > {code} > g.V().has("name","lop").values("lang").as("l").V().has("lang", "java") > {code} > The only difference is that the latter traversal knows that the {{lang}} > value is {{java}} at compile time and the former traversal only knows it at > runtime. In either case the value is known before it's needed for the > mid-traversal {{V().has(...)}} lookup part. -- This message was sent by Atlassian JIRA (v7.6.3#76005)