2015-09-26 62 views
0

我正在使用Gremlin 2.5.0/Groovy 2.3.7。如何将HashMap转换为Titan过滤器的Closure

我有一个hashMap,它包含我想要过滤的参数/值的键/值对。例如,我有

[param1:val1, param2:val2:, param3:val] 

的类型,我想使查询的是:

g.V.filter{it.param1=='val1' && it.param2=='val2' && it.param3=='val3'} 

有没有使用HashMap来使查询的一个简单的小鬼/ Groovy的方式吗?

回答

2

如果可能,应避免在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] 
1

我不知道什么是可以接受的过滤器关闭,但这可能工作。

def params = [param1:'val1', param2:'val2':, param3:'val3'] 
g.V.filter{ 
    params.every {key, value -> 
     it[key] == value 
    } 
}