Тинкерпоп, "Множественный" запрос - PullRequest
0 голосов
/ 08 апреля 2020

Я использую этот запрос

g.E().as('ID').select('ID').properties().as('PROP').select('PROP','ID')

Он ищет все края со свойствами, но игнорирует все края, у которых нет свойства.

Я хочу знать, как можно ли улучшить этот запрос для поиска каждого Edge со свойствами и без и предоставить все данные Edge (например, ID, SourceVerti c, TargetVerti c, метка и свойства).

1 Ответ

2 голосов
/ 08 апреля 2020

В общем, просмотр всех ребер на графике может быть дорогостоящим, если у вас много ребер. Это вообще не очень хорошая идея делать это на больших графиках. Я использовал шаг предела в своем примере ниже, который является одним из способов взглянуть только на некоторые ребра. Тем не менее, вы можете увидеть все свойства на ребре, используя valueMap. Например (по графику, который отслеживает футбольные матчи):

gremlin> g.E().valueMap().with(WithOptions.tokens).limit(5)
==>[id:400,label:played,date:12 Apr 2014,result:1-0]
==>[id:401,label:played,date:12 Apr 2014,result:1-0]
==>[id:402,label:played,date:12 Apr 2014,result:0-1]
==>[id:403,label:played,date:12 Apr 2014,result:1-0]
==>[id:404,label:played,date:12 Apr 2014,result:0-1] 

РЕДАКТИРОВАНИЕ добавить:

Если вы хотите включить смежные вершины в результат и используемая вами графическая база данных поддерживает Apache TinkerPop на уровне 3.4.4 или выше, вы можете использовать шаг elementMap. Пример показан ниже.

gremlin> g.E().limit(5).elementMap()
==>[id:34,label:member,IN:[id:1,label:EPL],OUT:[id:2,label:Team],years:22]
==>[id:35,label:member,IN:[id:1,label:EPL],OUT:[id:3,label:Team],years:22]
==>[id:36,label:member,IN:[id:1,label:EPL],OUT:[id:4,label:Team],years:22]
==>[id:37,label:member,IN:[id:1,label:EPL],OUT:[id:5,label:Team],years:22]
==>[id:38,label:member,IN:[id:1,label:EPL],OUT:[id:6,label:Team],years:22] 

Если база данных, которую вы используете, не поддерживает elementMap, вам нужно сделать что-то вроде:

gremlin> g.E().limit(5).
......1>       project('EDGE','IN','OUT').
......2>         by(valueMap().with(WithOptions.tokens)).
......3>         by(inV().union(id(),label()).fold()).
......4>         by(outV().union(id(),label()).fold())   
==>[EDGE:[id:34,label:member,years:22],IN:[1,EPL],OUT:[2,Team]]
==>[EDGE:[id:35,label:member,years:22],IN:[1,EPL],OUT:[3,Team]]
==>[EDGE:[id:36,label:member,years:22],IN:[1,EPL],OUT:[4,Team]]
==>[EDGE:[id:37,label:member,years:22],IN:[1,EPL],OUT:[5,Team]]
==>[EDGE:[id:38,label:member,years:22],IN:[1,EPL],OUT:[6,Team]]  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...