Gremlin оба E () удваивают число ребер? - PullRequest
0 голосов
/ 08 февраля 2019

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

Для вершин я использую:
g.V().has('document_id', P.within(list_o_keys)).count().next()

Для краев я использую:
g.V().has('document_id', P.within(list_o_keys)).bothE().count().next()

Поскольку у меня есть связи между этими вершинами, приводит ли это к двойному счету ребер ?
например, для отношения A-> B это будет считаться как 2Края с bothE() вернут ребра из A и ребра в B?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

В этом случае они будут учитываться дважды, как показано в следующем примере:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1,4).count()
==>2
gremlin> g.V(1,4).bothE().count()
==>6
gremlin> g.V(1,4).bothE().dedup().count()
==>5

dedup() - самый простой способ предотвратить это.Также обратите внимание, что вы можете объединить два обхода:

gremlin> g.V(1,4).fold().
           project('a','b').
             by(count(local)).
             by(unfold().bothE().dedup().count())
==>[a:2,b:5]
0 голосов
/ 08 февраля 2019

Ну, я бы не назвал это двойным счетом ребер.Он подсчитывает входящие ребра, а затем подсчитывает исходящие ребра:

gremlin> g.addV('a').as('a').
......1>   addV('b').as('b').
......2>   addE('link').from('a').to('b').
......3>   addE('link').from('b').to('a').iterate()
gremlin> g.V().hasLabel('a').bothE().count()
==>2

Обратите внимание, что он не считает ребра из A и в B. Он считает ребра из A и в A. Если вы хотите один илидругой, то вы бы использовали outE() или inE() в зависимости от того, что вам нужно.

...