从 gremlin 查询中的值列表中过滤节点
Filtering Nodes from a list of values in gremlin query
假设我有一个属性值列表作为 ArrayList,如何按列表中的值过滤节点。
这样的事情可能吗...
g.V().filter {it.get().value("name") in list}
它是否与 TinkerPop 兼容 2.x
您可以简单地使用 has
步骤进行过滤,因为它可以采用值列表,这要归功于 within
谓词:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> names=['josh','peter']; g.V().has('name', within(names))
==>v[4]
==>v[6]
编辑:我的回答不再真正解决问题,因为它现在要求 TinkerPop 2 解决方案。我仍然把它留在这里,以防有人在寻找 TinkerPop 3 的解决方案时偶然发现这个问题。
使用 filter()
步骤可以工作:
gremlin> [ 'Titan' : Titan.version(), 'TinkerPop' : Gremlin.version()]
==>Titan=0.5.4
==>TinkerPop=2.5.0
gremlin> g = TitanFactory.open('inmemory')
==>titangraph[inmemory:[127.0.0.1]]
gremlin> v0 = g.addVertex().setProperty('name', 'amith')
==>null
gremlin> v1 = g.addVertex().setProperty('name', 'jason')
==>null
gremlin> v2 = g.addVertex().setProperty('name', 'stephen')
==>null
gremlin> g.commit()
==>null
gremlin> l = ['amith', 'jason', 'florian'] // list to match
==>amith
==>jason
==>florian
gremlin> g.V().filter{ l.contains(it.getProperty('name')) }.map()
15:06:30 WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>{name=amith}
==>{name=jason}
请记住,Titan 0.5.4 已经过时(2015 年 2 月发布),它依赖于 TinkerPop 2.5.0(2014 年 4 月发布)。 Titan 和 TinkerPop 2.x 不再积极开发。
您应该考虑继续 JanusGraph, which is a fork of Titan, has an active and open community, and is keeping current with the latest releases of Apache TinkerPop 3.x。
假设我有一个属性值列表作为 ArrayList,如何按列表中的值过滤节点。
这样的事情可能吗...
g.V().filter {it.get().value("name") in list}
它是否与 TinkerPop 兼容 2.x
您可以简单地使用 has
步骤进行过滤,因为它可以采用值列表,这要归功于 within
谓词:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> names=['josh','peter']; g.V().has('name', within(names))
==>v[4]
==>v[6]
编辑:我的回答不再真正解决问题,因为它现在要求 TinkerPop 2 解决方案。我仍然把它留在这里,以防有人在寻找 TinkerPop 3 的解决方案时偶然发现这个问题。
使用 filter()
步骤可以工作:
gremlin> [ 'Titan' : Titan.version(), 'TinkerPop' : Gremlin.version()]
==>Titan=0.5.4
==>TinkerPop=2.5.0
gremlin> g = TitanFactory.open('inmemory')
==>titangraph[inmemory:[127.0.0.1]]
gremlin> v0 = g.addVertex().setProperty('name', 'amith')
==>null
gremlin> v1 = g.addVertex().setProperty('name', 'jason')
==>null
gremlin> v2 = g.addVertex().setProperty('name', 'stephen')
==>null
gremlin> g.commit()
==>null
gremlin> l = ['amith', 'jason', 'florian'] // list to match
==>amith
==>jason
==>florian
gremlin> g.V().filter{ l.contains(it.getProperty('name')) }.map()
15:06:30 WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>{name=amith}
==>{name=jason}
请记住,Titan 0.5.4 已经过时(2015 年 2 月发布),它依赖于 TinkerPop 2.5.0(2014 年 4 月发布)。 Titan 和 TinkerPop 2.x 不再积极开发。
您应该考虑继续 JanusGraph, which is a fork of Titan, has an active and open community, and is keeping current with the latest releases of Apache TinkerPop 3.x。