如何将 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]