Прямой ответ будет использовать or()
, но стоит проверить, как график оптимизирует этот обход с profile()
. Для TinkerGraph:
gremlin> g.V().or(has('software','name','lop'),has('person','name','marko')).profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TinkerGraphStep(vertex,[]) 6 6 0.065 30.59
OrStep([[HasStep([~label.eq(software), name.eq(... 2 2 0.147 69.41
HasStep([~label.eq(software), name.eq(lop)]) 0.062
HasStep([~label.eq(person), name.eq(marko)]) 0.011
>TOTAL - - 0.212 -
мы видим, что это не так хорошо, как полное сканирование графика. Чтобы избежать сканирования в TinkerGraph, вам может потребоваться сделать что-то более креативное:
gremlin> g.inject(1).union(V().has('software','name','lop'),
......1> V().has('person','name','marko')).profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
InjectStep([1]) 1 1 0.019 8.39
UnionStep([[TinkerGraphStep(vertex,[~label.eq(s... 2 2 0.210 91.61
TinkerGraphStep(vertex,[~label.eq(software), ... 1 1 0.004
EndStep 1 1 0.011
TinkerGraphStep(vertex,[~label.eq(person), na... 1 1 0.004
EndStep 1 1 0.040
>TOTAL - - 0.229 -