kevad
kevad

Reputation: 419

Querying in Gremlin using multiple indices

I am trying to optimize requests in Gremlin on a Neo4J graph.

Here is the short version of the basic request I am using:

g.idx("myIndex")[[myId:5]].outE("HAS_PRODUCT").filter{it.shop_id:5}.inV

So I looked into indexation and got to create an index on "HAS_PRODUCT"-typed edges with key 'shop_id'.

Using the same request, I don't see a big difference.

My questions are:

Thanks!

Upvotes: 0

Views: 1155

Answers (1)

stephen mallette
stephen mallette

Reputation: 46226

The short answer is that Gremlin won't make use of the secondary index when using Neo4j, but please consider reading the longer answer below in relation to TinkerPop, Gremlin and its philosophy.

The longer answer is....Indices are not being used for your shop_id. When you call outE you are effectively iterating all the edges to find those with shop_id == 5. To make use of indices in Gremlin you should use a vertex query. So, rewriting your code a bit (to also use key indices) would be like:

g.V('myIndex',5).outE('HAS_PRODUCT').has('shop_id',5).inV

With Blueprints implementations that support vertex-centric indices, the use of has will utilize that index automatically. Unfortunately, Neo4j is not one of those databases yet. Blueprints implementations that do implement it, include Titan (see Vertex-centric indices) and OrientDB (as part of the yet unreleased Blueprints 2.4.0...I believe they will have a partial implementation in that release) in that case.

Upvotes: 4

Related Questions