Как я могу фильтровать после выбора в гремлине? - PullRequest
0 голосов
/ 20 сентября 2019

Я сохранил список вершин в переменной.

tv = g.V().hasLabel('user').has('name', 'xxyy').out().out().dedup().toList()

Список содержит вершины с меткой 'topic'.

Я пытаюсь выполнить поиск, чтобы найти содержимоес теми же темами в переменной выше.

g.V().hasLabel('user').has('name', 'xxyy').out().in().hasLabel('influencer')
.dedup().out().hasLabel('content').as('content').out().as('topic')
.select('content', 'topic')
==>{content=v[22663384], topic=v[23412864]}
==>{content=v[22663384], topic=v[23412864]}
==>{content=v[22663384], topic=v[23445624]}
==>{content=v[22663384], topic=v[23445624]}
==>{content=v[22663384], topic=v[23548032]}
==>{content=v[22663384], topic=v[23548032]}
==>{content=v[22663384], topic=v[23597056]}
==>{content=v[22663384], topic=v[23597056]}
==>{content=v[22663384], topic=v[24039672]}
==>{content=v[22663384], topic=v[24039672]}
==>{content=v[22663384], topic=v[64716880]}
==>{content=v[22663384], topic=v[64716880]}
==>{content=v[22663384], topic=v[65163456]}
...

Это даст все пары контента и их темы.Мне нужны только вершины контента, чтобы тема находилась внутри ТВ.

Я не могу понять, как я могу использовать фильтр или где выполнять фильтрацию.Любая помощь приветствуется.

Спасибо!

1 Ответ

1 голос
/ 20 сентября 2019

Если вам нужна переменная tv для чего-то другого, тогда ваш второй запрос будет:

g.V().hasLabel('user').has('name', 'xxyy').
   out().in().hasLabel('influencer').
   dedup().
   out().hasLabel('content').as('content').
   out().is(within(tv)).as('topic').
   select('content', 'topic')

Однако, если единственная цель tv - это переменная фильтра, вы нене нужно этого делать.Вы можете сделать все в одном запросе:

g.V().hasLabel('user').has('name', 'xxyy').
   out().sideEffect(out().aggregate('tv')).barrier().
   in().hasLabel('influencer').
   dedup().
   out().hasLabel('content').as('content').
   out().where(within('tv')).as('topic').
   select('content', 'topic')

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

...