Neo4j 在Gremlin中使用多个索引进行查询

Neo4j 在Gremlin中使用多个索引进行查询,neo4j,gremlin,Neo4j,Gremlin,我试图在Neo4J图上优化Gremlin中的请求 以下是我正在使用的基本请求的简短版本: g.idx("myIndex")[[myId:5]].outE("HAS_PRODUCT").filter{it.shop_id:5}.inV 因此,我研究了索引,并在“HAS\u PRODUCT”类型的边上创建了一个索引,键为“shop\u id” 使用相同的请求,我看不出有多大区别 我的问题是: 当我使用:filter{it.shop\u id:5} 如果没有,如何在请求中使用此新索引 更一般地说,

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

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

g.idx("myIndex")[[myId:5]].outE("HAS_PRODUCT").filter{it.shop_id:5}.inV
因此,我研究了索引,并在
“HAS\u PRODUCT”
类型的边上创建了一个索引,键为
“shop\u id”

使用相同的请求,我看不出有多大区别

我的问题是:

  • 当我使用:
    filter{it.shop\u id:5}

  • 如果没有,如何在请求中使用此新索引

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


P< >简短的回答是GeMLLin在使用NeN4J时不会使用二次索引,但是请考虑阅读下面关于TinkerPop、GrimLin及其哲学的较长的答案。 较长的答案是……索引没有用于您的
shop\u id
。当您调用
outE
时,您有效地迭代了所有边,以找到
shop\u id==5
的边。要在Gremlin中使用索引,您应该使用a。因此,稍微重写代码(也可以使用)如下:

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

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

< P>简短的回答是GeMLLin在使用NeN4J时不会使用二次索引,但是请考虑阅读下面关于TinkerPop、GrimLin及其哲学的较长答案。 较长的答案是……索引没有用于您的
shop\u id
。当您调用
outE
时,您有效地迭代了所有边,以找到
shop\u id==5
的边。要在Gremlin中使用索引,您应该使用a。因此,稍微重写代码(也可以使用)如下:

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

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

我意识到我的答案并没有完全涵盖你所有的问题。要完全回答,我有一个自己的问题。在这种情况下,你知道
shop\u ID
的ID,这是一个边索引。既然你知道这个值,那么你最好从那里开始遍历,因为你知道更有限的inV/outV的et(我假设
myId:5
有很多边)?我实际上缩短了我的查询,但主要方案是上面的一个,整个查询有2个过滤器,总遍历大约有5条边。
myId:5
没有多少边,它对应于一个产品列表。然而,
g.idx(“by_shopid”)[[shop_id:5]]
有很多传入的
“has_PRODUCT”
关系。如果我想在该商店中获得与该列表中的产品相对应的产品,我需要从该列表遍历到该商店(或以其他方式).从具有
shop\u id
索引请求的店铺开始,我仍然需要遍历到我的列表。我意识到我的答案没有完全涵盖您的所有问题。要完全回答,我有一个自己的问题。在这种情况下,您知道
shop\u id
的id,这是一个边缘索引。既然您知道这个值,那么最好从这里开始遍历,因为您知道更有限的inV/outV集(我假设
myId:5
有很多边)?我实际上缩短了我的查询,但主要方案是上面的一个,完整的查询有2个过滤器,总的遍历大约有5条边。
myId:5
没有多少边,它对应于一个产品列表。但是,
g.idx(“by_shopid”)[[shop_id:5]
有很多传入的
“has_PRODUCT”
关系。如果我想在该商店中获得与该列表中的产品相对应的产品,我需要从该列表遍历到该商店(或者反过来).从
shop_id
上有索引请求的店铺开始,我仍然需要遍历到我的列表。我将稍微偏离主题,但支持顶点中心索引的Neo4j蓝图实现是否有任何ETA?即使没有明确的日期,也只是知道它是一致的dered?ThanksIt真的不是蓝图发布时间表的问题。我认为Neo4j目前没有任何可以利用蓝图公开的顶点查询API的功能。无法在本机上利用顶点查询的蓝图实现变得“简单”支持该功能,因为它们遵从默认的内存处理器(),这将迭代所有结果。@stephen谢谢你的回答!我实际上在这一页上看到了这一点:无法使用has方法重现查询时间增益。这将促使向Titan的迁移。Neo4j从2.1版开始按标签和方向对边进行分组:我将稍微偏离主题,但Neo4j蓝图实现中是否有支持以顶点为中心索引的ETA?即使没有明确的日期,也只考虑了解它的情况?ThanksIt确实不是蓝图发布时间表的问题。我认为Neo4j目前没有任何可以利用该蓝图的顶点查询API的功能指纹曝光。蓝图实施