Гремлин, идентифицирующий подмножества популяций, основанные на вершинах, которые имеют только входящие или выходящие ребра - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть гремлиновый график с пользователями, у которых есть функции. Края графика go выходят из пользователей и вводят функции. У пользователей нет входящих ребер и нет исходящих ребер от функций. Каждая пользовательская вершина имеет множество дюжин исходящих ребер в вершины объектов.

Я хочу найти подмножество пользователей-женщин, которые подключены к вершинам feature_a и feature_b. Я использую gremlinpython и знаю, что могу сделать какое-то пересечение множеств в python с кодом ниже. Есть ли в Гремлине способ достичь этого?

q = '''g.V('feature_a').
        inv().has('gender','Female')'''

res1 = client.submit(q).all().result()

q2 = '''g.V('feature_b').
        inv().has('gender','Female')'''

res2 = client.submit(q2).all().result()


vs_in_common = set(res2).intersection(set(res1)))

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

То, что опубликовал Майкл, работает, но это полное сканирование всех пользователей на графике (если только gender не проиндексировано, но это может вызвать другие проблемы, рано или поздно). Лучше сделать что-то вроде следующего:

g.V().hasId('feature_a').
  in().has('gender', 'Female').
  filter(out().hasId('feature_b'))

Также, если возможно, укажите метку ребра в шагах in и out.

1 голос
/ 10 февраля 2020

try:

 g.V().hasLabel('User').has('gender', 'Female').and(
         __.out().hasId('feature_a'),
         __.out().hasId('feature_b')
         )

Похоже, вы ищете шаг and() для пересечения в gremlin.

...