tinkerpop3 icon indicating copy to clipboard operation
tinkerpop3 copied to clipboard

Search should be a P-predicate (match.any(), match.exact(), etc.)

Open okram opened this issue 9 years ago • 1 comments

I noticed this in the documentation.

graph.search("hell*", Match.ANY).count()

If a P-predicate is created for Match.ANY (and the others) then, when the TraversalStrategy that folds has()-steps into BlazeGraphStep, it can do what it needs with the P-predicate and thus, the following would work:

g = graph.traversal()
g.V().has("key",matches.any("hell*")).count()

The reason that reg-ex (and stuff like geo) are NOT in TinkerPop is that various backends have different semantics for such predicates. Thus, we recommend that graph providers simply create respective P-predicates and GraphStep rules for handling the HasContainers.


  • P-predicates are easy to implement.

https://github.com/apache/incubator-tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java

  • How to fold in has()-steps.

https://github.com/apache/incubator-tinkerpop/blob/master/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java

  • How to use the folds for index lookups in a GraphStep implementation.

https://github.com/apache/incubator-tinkerpop/blob/master/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java

okram avatar Jan 21 '16 16:01 okram

@mikepersonick

beebs-systap avatar Jan 21 '16 17:01 beebs-systap