2015-09-26 2 views
0

Я использую Gremlin 2.5.0/Groovy 2.3.7.Как конвертировать HashMap в Closure для фильтра Titan

У меня есть hashMap, который содержит пары ключ-значение параметров/значений, для которых я хочу фильтровать. Например, у меня есть

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

Тип запроса, который я хочу сделать это:

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

Есть простой Gremlin/Groovy способ использования HashMap сделать запрос?

ответ

2

Вы должны избегать использования filter в Gremlin, когда это возможно, особенно с Титаном и на крупномасштабных графиках. Использование 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 
    } 
}