我正在尝试在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(
是使用索引的图表方法,是否有管道方法?
谢谢!
答案 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的一部分......我相信它们将在该版本中部分实现)。