Ваш запрос должен возвращать все вершины, которые имеют свойство name
, так как select('a')
всегда должно возвращать значение.
Нет способа использовать введенные значения и в то же время получить выгоду от поиска по индексу. Единственное, что вы можете сделать, - это полное сканирование вершин:
gremlin> g.inject('vadas').as('a').V().where(eq('a')).by('name').by()
==>v[2]
Это хорошо работает на небольшом графике в памяти, но, безусловно, не является масштабируемым решением.
UPDATE
Если вложенные select()
недоступны, вы все равно можете сделать что-то вроде этого:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> data = ["marko": ["title": "dr", "age": 40]]
==>marko={title=dr, age=40}
gremlin> g.V().has("person","name",within(data.keySet())).as("v").
flatMap(constant(data).unfold().
where(eq("v")).
by(keys).
by("name").
select(values).
unfold()).as("kv").
select("v").
property(select("kv").by(keys), select("kv").by(values)).
iterate()
gremlin>
gremlin> g.V().valueMap()
==>[name:[marko],title:[dr],age:[40]]
...
В этом обходе есть полное сканирование, но только по структуре памяти data
. Следовательно, если data
не слишком большой, производительность обхода должна / может быть приемлемой.