Отфильтруйте ребра со списком в качестве значения свойства, используя gremlin-python - PullRequest
0 голосов
/ 05 июля 2018

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

Также обратите внимание, что Amazon Neptune не поддерживает лямбду шагов , поэтому в решении не могут использоваться лямбды.

1 Ответ

0 голосов
/ 08 октября 2018

Я не уверен, что это все еще проблема для вас или нет, но мне интересно, не сработает ли это для вас:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('person').as('a').addE('self').to('a').property('x',[1,2,3]).select('a').addE('self').to('a').property('x',[10,20,30]).iterate()
gremlin> g.E().valueMap(true)
==>[x:[1,2,3],id:3,label:self]
==>[x:[10,20,30],id:4,label:self]
gremlin> g.V().outE('self').filter(local(values('x').unfold().is(2))).valueMap(true)
==>[x:[1,2,3],id:3,label:self]

По сути, вы можете развернуть local() вашего свойства списка и затем отфильтровать его. Нептун, вероятно, не будет оптимизировать этот фильтр (например, использовать индекс), но если вы не фильтруете большое количество ребер, это может быть достаточным обходным путем (если он работает).

Обратите внимание, что я написал выше в Groovy, чтобы проверить это легко. В Python вы должны обратить внимание на некоторые незначительные изменения синтаксиса вокруг конфликтов имен. Следовательно, последний обход здесь будет написан так на python (потому что is является зарезервированным словом в python):

g.V().outE('self').filter(local(values('x').unfold().is_(2))).valueMap(true)
...