如何将 HashMap 转换为 Titan 过滤器的闭包
How to convert HashMap to Closure for Titan filter
我正在使用 Gremlin 2.5.0 / Groovy 2.3.7.
我有一个 hashMap,其中包含我要过滤的 parameters/values 的键值对。例如,我有
[param1:val1, param2:val2:, param3:val]
我要查询的类型是:
g.V.filter{it.param1=='val1' && it.param2=='val2' && it.param3=='val3'}
是否有使用 hashMap 进行查询的直接 Gremlin/Groovy 方法?
我不知道过滤器关闭中可以接受什么,但这可能有效。
def params = [param1:'val1', param2:'val2':, param3:'val3']
g.V.filter{
params.every {key, value ->
it[key] == value
}
}
您应该尽可能避免在 Gremlin 中使用 filter
,尤其是在 Titan 和大型图表上。使用 filter
将阻止 Titan 正确使用索引。如果可能,您应该更喜欢使用 has
。
我会尝试用你的 Map
:
建立一个管道
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> params = [name:'josh',age:32]
==>name=josh
==>age=32
gremlin> pipeline = g.V();null
==>null
gremlin> params.each{k,v->pipeline=pipeline.has(k,v)}
==>name=josh
==>age=32
gremlin> pipeline
==>v[4]
我正在使用 Gremlin 2.5.0 / Groovy 2.3.7.
我有一个 hashMap,其中包含我要过滤的 parameters/values 的键值对。例如,我有
[param1:val1, param2:val2:, param3:val]
我要查询的类型是:
g.V.filter{it.param1=='val1' && it.param2=='val2' && it.param3=='val3'}
是否有使用 hashMap 进行查询的直接 Gremlin/Groovy 方法?
我不知道过滤器关闭中可以接受什么,但这可能有效。
def params = [param1:'val1', param2:'val2':, param3:'val3']
g.V.filter{
params.every {key, value ->
it[key] == value
}
}
您应该尽可能避免在 Gremlin 中使用 filter
,尤其是在 Titan 和大型图表上。使用 filter
将阻止 Titan 正确使用索引。如果可能,您应该更喜欢使用 has
。
我会尝试用你的 Map
:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> params = [name:'josh',age:32]
==>name=josh
==>age=32
gremlin> pipeline = g.V();null
==>null
gremlin> params.each{k,v->pipeline=pipeline.has(k,v)}
==>name=josh
==>age=32
gremlin> pipeline
==>v[4]