使用多个索引在Gremlin中查询

时间:2013-07-05 16:07:39

标签: neo4j gremlin

我正在尝试在Neo4J图上优化Gremlin中的请求。

以下是我使用的基本请求的简短版本:

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

所以我研究了索引并开始在"HAS_PRODUCT"上创建一个索引 - 键入'shop_id'的边缘。

使用相同的请求,我没有看到很大的区别。

我的问题是:

  • 我在使用filter{it.shop_id:5}

  • 查询时是否使用了我的新索引
  • 如果没有,我如何在我的请求中使用这个新索引?

  • 更一般地说,如果idx(是使用索引的图表方法,是否有管道方法?

谢谢!

1 个答案:

答案 0 :(得分:4)

简短的回答是Gremlin在使用Neo4j时不会使用二级索引,但请考虑阅读下面关于TinkerPop,Gremlin及其哲学的更长答案。

答案越长......指数不会用于shop_id。当您致电outE时,您正在有效地迭代所有边缘以找到shop_id == 5的边缘。要在Gremlin中使用索引,您应该使用vertex query。因此,稍微重写一下代码(也使用key indices)就像:

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

使用支持以顶点为中心的索引的蓝图实现,has的使用将自动利用该索引。不幸的是,Neo4j还不是那些数据库之一。实现它的蓝图实现包括Titan(参见Vertex-centric indices)和OrientDB(作为未发布的蓝图2.4.0的一部分......我相信它们将在该版本中部分实现)。