在 Gremlin 中使用多个模式标准遍历图形

Traverse a graph using multiple schema criteria in Gremlin

我正在尝试进行 Gremlin 查询以遍历包含人物和地点的图表。查询需要获取 person-looking-each-other 的计数。假设它已经被图像算法收集和处理。请参阅下面的虚拟图表。

g.addV('local').as('1').
  property(single, 'cidade', 'Londres').
  property(single, 'rua', 'Oxford').
  addV('pessoa').as('2').
  property(single, 'idade', 25).
  property(single, 'nome', 'Liam').
  property(single, 'genero', 'M').
  addV('pessoa').as('3').
  property(single, 'idade', 45).
  property(single, 'nome', 'Preston').
  property(single, 'genero', 'M').
  addV('pessoa').as('4').
  property(single, 'idade', 25).
  property(single, 'nome', 'Lexie').
  property(single, 'genero', 'F').
  addV('pessoa').as('5').
  property(single, 'idade', 45).
  property(single, 'nome', 'Toby').
  property(single, 'genero', 'M').
  addV('pessoa').as('6').
  property(single, 'idade', 52).
  property(single, 'nome', 'Sam').
  property(single, 'genero', 'M').
  addV('pessoa').as('7').
  property(single, 'idade', 32).
  property(single, 'nome', 'Jack').
  property(single, 'genero', 'M').
  addV('pessoa').as('8').
  property(single, 'idade', 29).
  property(single, 'nome', 'Lola').
  property(single, 'genero', 'F').
  addV('pessoa').as('9').
  property(single, 'idade', 51).
  property(single, 'nome', 'Bella').
  property(single, 'genero', 'F').
  addV('pessoa').as('10').
  property(single, 'idade', 37).
  property(single, 'nome', 'Dalilah').
  property(single, 'genero', 'F').
  addV('pessoa').as('11').
  property(single, 'idade', 28).
  property(single, 'nome', 'Oliver').
  property(single, 'genero', 'M').
  addV('pessoa').as('12').
  property(single, 'idade', 21).
  property(single, 'nome', 'Peter').
  property(single, 'genero', 'M').
  addV('pessoa').as('13').
  property(single, 'idade', 18).
  property(single, 'nome', 'Tyler').
  property(single, 'genero', 'M').addV('local').
    as('14').
  property(single, 'rua', 'Atlântica').
  property(single, 'cidade', 'Rio de Janeiro').
  addV('pessoa').as('15').
  property(single, 'nome', 'Marta').
  property(single, 'idade', 24).
  property(single, 'genero', 'F').
  addV('pessoa').as('16').
  property(single, 'nome', 'Jorge').
  property(single, 'idade', 18).
  property(single, 'genero', 'M').
  addE('olhou-para').from('2').to('4').
  addE('caminhando-em').from('2').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('3').to('4').
  addE('caminhando-em').from('3').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('4').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('5').to('4').
  addE('caminhando-em').from('5').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('6').to('4').
  addE('caminhando-em').from('6').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('7').to('9').
  addE('caminhando-em').from('7').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('8').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('9').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('10').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('11').to('10').
  addE('caminhando-em').from('11').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('12').to('8').
  addE('caminhando-em').from('12').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('13').to('8').
  addE('caminhando-em').from('13').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('15').to('14').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('16').to('14').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('16').to('15')

这句话是葡萄牙语,“caminhando-em”的意思是“行走”,意思是一个人在特定的街道上行走。边缘“olhou-para”的意思是“凝视”,意思是一个人在那个地方看着另一个人。 objective 是根据其他人的外表来“衡量”一个人的美丽。不知道“stared”这个词用英语表达这个词是否合适

下面的查询用于获取按接受查看的人汇总的查看计数。

g.V().
inE("olhou-para").
group().by(inV().values("nome")).unfold().
project("pessoa","count").
by(select(keys)).
by(select(values).count(local)).
order().by("count",Order.desc)

结果是:

[
  {
    "pessoa": "Lexie",
    "count": 4
  },
  {
    "pessoa": "Lola",
    "count": 2
  },
  {
    "pessoa": "Marta",
    "count": 1
  },
  {
    "pessoa": "Dalilah",
    "count": 1
  },
  {
    "pessoa": "Bella",
    "count": 1
  }
]

问题是:如何 select 仅在特定的 data/time 中从伦敦寻找? 我的意思是,如何过滤以忽略来自“里约热内卢”城市的“Marta”顶点?

提前致谢, 胡里奥

您或许可以像这样添加一个额外的过滤器:

gremlin> g.V().
......1> inE("olhou-para").
......2> filter(outV().out('caminhando-em').has('cidade','Londres')).
......3> group().by(inV().values("nome")).unfold().
......4> project("pessoa","count").
......5> by(select(keys)).
......6> by(select(values).count(local)).
......7> order().by("count",Order.desc)

==>[pessoa:Lexie,count:4]
==>[pessoa:Lola,count:2]
==>[pessoa:Dalilah,count:1]
==>[pessoa:Bella,count:1]