0

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

这是我正在使用的基本请求的简短版本:

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

"HAS_PRODUCT"所以我研究了索引,并使用 key 在 -typed 边上创建了一个索引'shop_id'

使用相同的请求,我看不出有很大的不同。

我的问题是:

  • 查询时是否使用了我的新索引:filter{it.shop_id:5}

  • 如果没有,我如何在我的请求中使用这个新索引?

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

谢谢!

4

1 回答 1

4

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

更长的答案是....索引没有用于您的shop_id. 当您调用时,outE您实际上是在迭代所有边缘以找到带有shop_id == 5. 要在 Gremlin 中使用索引,您应该使用顶点查询。所以,稍微重写你的代码(也使用key indices)就像:

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

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

于 2013-07-05T18:28:09.903 回答