-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Closed
Labels
Milestone
Description
In-fixed "and" and "or" predicates do not leverage indexes as aggressively as they should.
For example, with an index on name, the following queries will still result in a full scan:
g.V().has("name","marko").or().has("name","vadas")
g.V().or(has("name", "marko"),has("name", "vadas"))
Full repro steps:
gremlin> graph = JanusGraphFactory.open('conf/janusgraph-cassandra.properties')
==>standardjanusgraph[cassandrathrift:[127.0.0.1]]
gremlin> mgmt = graph.openManagement()
==>org.janusgraph.graphdb.database.management.ManagementSystem@4bd51d3e
gremlin> name = mgmt.makePropertyKey("name").dataType(String.class).make()
==>name
gremlin> mgmt.buildIndex("byName", Vertex.class).addKey(name).buildCompositeIndex()
==>byName
gremlin> mgmt.commit()
==>null
gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[cassandrathrift:[127.0.0.1]], standard]
gremlin> graph.io(IoCore.gryo()).readGraph('data/tinkerpop-modern.kryo')
==>null
gremlin> g.V().has('name','marko').or().has('name','vadas')
14:36:49 WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>v[4136]
==>v[4208]
gremlin> g.V().has('name',within('marko', 'vadas'))
==>v[4208]
==>v[4136]
gremlin> g.V().or(has("name", "marko"),has("name", "vadas"))
14:49:23 WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>v[4136]
==>v[4208]
Reactions are currently unavailable