2015-09-26 64 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 
    } 
}