Gremlin: добавление ребер в несколько вершин - PullRequest
0 голосов
/ 12 марта 2019

У меня есть вершины [song1, song2, song3, user].

Я хочу добавить ребра listened из user к песням.

У меня есть следующее:

g.V().is(within(song1, song2, song3)).addE('listened').from(user)

Однако я получаю следующую ошибку:

Нет подписи метода: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.from () применим для типов аргументов: (org.janusgraph.graphdb.vertices.CacheVertex) значения: [v [4344]] Возможные решения: sort (), drop (int), sum (), find (), grep (), sort (groovy.lang.Closure)

Конечно, я могу перебирать их по одному, но один запрос будет полезен:

user.addEdge('listened', song1)
user.addEdge('listened', song2)
user.addEdge('listened', song3)

1 Ответ

1 голос
/ 12 марта 2019

Модулятор from() принимает две вещи:

  1. метка шага или
  2. обход

Одна вершина или список вершинможно легко превратить в обход, обернув его в V().Также обратите внимание, что g.V().is(within(...)), скорее всего, закончится полным сканированием всех вершин;это в значительной степени зависит от реализации провайдера, но вы должны вместо этого использовать g.V(<list of vertices>).Таким образом, ваш обход должен выглядеть примерно так:

g.V().is(within(song1, song2, song3)).
  addE('listened').from(V(user)) // actually bad, as it's potentially a full scan

g.V(song1, song2, song3).
  addE('listened').from(V(user))

g.V(user).as('u').
  V(within(song1, song2, song3)).
  addE('listened').from('u')
...