при выборе вершины с помощью has ('prop', 'value') с введенным 'value' - PullRequest
0 голосов
/ 17 мая 2019

Можно ли выбрать свойства вершин, используя введенные значения?

Я не могу использовать лямбду, указанную в официальном документе: http://tinkerpop.apache.org/docs/current/reference/#inject-step, поскольку в нашем случае лямбда не поддерживается.

Я пытался сделать

g.inject('vadas').as('a').V().has('name', select('a'))

но он возвращает все вершины, которые имеют атрибут 'name', похоже, что он не выбирает введенное значение

Есть ли какие-нибудь способы, которыми я могу сделать фильтр has, основанный на некоторых введенных значениях?

1 Ответ

2 голосов
/ 17 мая 2019

Ваш запрос должен возвращать все вершины, которые имеют свойство 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 не слишком большой, производительность обхода должна / может быть приемлемой.

...