Добавление ребер между вершинами с использованием свойств - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь добавить ребра между вершинами, аналогичные этому вопросу , за исключением того, что существуют различные свойства, равенство которых я хочу рассмотреть, например, используя TinkerGraph с индексом на 'x':

g.addV().property("x", "1").
  addV().property("x", "2").property("y", "1").
  addV().property("x", "3").property("y", "2")

Я пытаюсь добавить два ребра, где x = y, чтобы (x=3,y=2) --link--> (x=2,y=1) --link--> (x=1) использовал что-то вроде:

g.V().as("a").
  V().as("b").
  where(has("x", select("a").values("y"))).
  addE("link").from("a").to("b")

Однако этот конкретный запрос создает больше ребер, чем я ожидал (все вершины с'y' связаны со всеми остальными вершинами).

Любая помощь в формировании соответствующего предложения where будет принята с благодарностью.

1 Ответ

0 голосов
/ 22 января 2019

При отладке Gremlin вам иногда нужно удалить какой-то шаг, чтобы вы оглянулись назад на то, что возвращается из более ранних частей конвейера.Обратите внимание, что возвращает первая часть вашего обхода:

gremlin> g.V().as("a").
......1>   V().as("b")
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]

Вы можете понять, почему у вас получилось намного больше ребер, которые вы хотели бы получить.Я начал отфильтровывать некоторые из них следующим образом:

gremlin> g.V().has('x').as('a').
......1>   V().has('y').as('b').
......2>   where('a',neq('b'))
==>v[2]
==>v[5]
==>v[5]
==>v[2]

Вы заботитесь только о вершинах, у которых есть свойство "x" для "a" и свойство "y" для "b", а так как вы неЕсли вы хотите, чтобы эти вершины совпадали друг с другом, вы также хотите отменить их с помощью where('a',neq('b')).

. Отсюда оставшееся предложение where() очень похоже на предложение в вопросе, на который вы ссылались:

gremlin> g.V().has('x').as('a').
......1>   V().has('y').as('b').
......2>   where('a', neq('b')).
......3>   where('a', eq('b')).by('x').by('y').
......4>   addE('link').from('a').to('b')
==>e[8][0-link->2]
==>e[9][2-link->5]

таким образом:

gremlin> g.V().has('x','1').outE('link').inV().outE('link').inV().path().by('x').by(label)
==>[1,link,2,link,3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...